From 50fe4b63209202a17e54163b8201561cbd7b2bd6 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 9 Jul 2012 16:06:15 -0700 Subject: [PATCH] Functions that return an SLE::pointer that find the next/prev nodes in the state tree. --- src/Ledger.h | 6 ++++++ src/LedgerNode.cpp | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/src/Ledger.h b/src/Ledger.h index fe0d1ab157..d5565f622c 100644 --- a/src/Ledger.h +++ b/src/Ledger.h @@ -152,6 +152,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 c600c8f367..2013247ad1 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 ) {