Add SLE next/prev functions.

This commit is contained in:
JoelKatz
2012-07-09 17:12:20 -07:00
parent 3cab7da1f4
commit 6be83c09db
2 changed files with 38 additions and 0 deletions

View File

@@ -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, <max
SLE::pointer getPrevSLE(const uint256& hash); // last node <hash
SLE::pointer getPrevSLE(const uint256& hash, const uint256& min); // last node <hash, >min
// index calculation functions
static uint256 getAccountRootIndex(const uint160& uAccountID);

View File

@@ -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<SLE>(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<SLE>(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<SLE>(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<SLE>(node->peekSerializer(), node->getTag());
}
SLE::pointer Ledger::getASNode(LedgerStateParms& parms, const uint256& nodeID,
LedgerEntryType let )
{