From 6be83c09db322a3e0254eb9fb7ee260a81669d2c Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 9 Jul 2012 17:12:20 -0700 Subject: [PATCH] Add SLE next/prev functions. --- src/Ledger.h | 6 ++++++ src/LedgerNode.cpp | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/src/Ledger.h b/src/Ledger.h index 482fb27ba3..e175a18209 100644 --- a/src/Ledger.h +++ b/src/Ledger.h @@ -153,6 +153,12 @@ public: static Ledger::pointer loadByIndex(uint32 ledgerIndex); static Ledger::pointer loadByHash(const uint256& ledgerHash); + // next/prev function + SLE::pointer getNextSLE(const uint256& hash); // first node >hash + SLE::pointer getNextSLE(const uint256& hash, const uint256& max); // first node >hash, min + // index calculation functions static uint256 getAccountRootIndex(const uint160& uAccountID); diff --git a/src/LedgerNode.cpp b/src/LedgerNode.cpp index d059b9c3e7..84be09053b 100644 --- a/src/LedgerNode.cpp +++ b/src/LedgerNode.cpp @@ -43,6 +43,38 @@ LedgerStateParms Ledger::writeBack(LedgerStateParms parms, SLE::pointer entry) return lepOKAY; } +SLE::pointer Ledger::getNextSLE(const uint256& hash) +{ + SHAMapItem::pointer node = mAccountStateMap->peekNextItem(hash); + if (!node) + return SLE::pointer(); + return boost::make_shared(node->peekSerializer(), node->getTag()); +} + +SLE::pointer Ledger::getNextSLE(const uint256& hash, const uint256& max) +{ + SHAMapItem::pointer node = mAccountStateMap->peekNextItem(hash); + if ((!node) || (node->getTag() > max)) + return SLE::pointer(); + return boost::make_shared(node->peekSerializer(), node->getTag()); +} + +SLE::pointer Ledger::getPrevSLE(const uint256& hash) +{ + SHAMapItem::pointer node = mAccountStateMap->peekPrevItem(hash); + if (!node) + return SLE::pointer(); + return boost::make_shared(node->peekSerializer(), node->getTag()); +} + +SLE::pointer Ledger::getPrevSLE(const uint256& hash, const uint256& min) +{ + SHAMapItem::pointer node = mAccountStateMap->peekNextItem(hash); + if ((!node) || (node->getTag() < min)) + return SLE::pointer(); + return boost::make_shared(node->peekSerializer(), node->getTag()); +} + SLE::pointer Ledger::getASNode(LedgerStateParms& parms, const uint256& nodeID, LedgerEntryType let ) {