mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-20 11:05:54 +00:00
69 lines
1.9 KiB
C++
69 lines
1.9 KiB
C++
//------------------------------------------------------------------------------
|
|
/*
|
|
Copyright (c) 2011-2013, OpenCoin, Inc.
|
|
*/
|
|
//==============================================================================
|
|
|
|
AccountItems::AccountItems (uint160 const& accountID,
|
|
Ledger::ref ledger,
|
|
AccountItem::pointer ofType)
|
|
{
|
|
mOfType = ofType;
|
|
|
|
fillItems (accountID, ledger);
|
|
}
|
|
|
|
void AccountItems::fillItems (const uint160& accountID, Ledger::ref ledger)
|
|
{
|
|
uint256 const rootIndex = Ledger::getOwnerDirIndex (accountID);
|
|
uint256 currentIndex = rootIndex;
|
|
|
|
// VFALCO TODO Rewrite all infinite loops to have clear terminating
|
|
// conditions defined in one location.
|
|
//
|
|
while (1)
|
|
{
|
|
SLE::pointer ownerDir = ledger->getDirNode (currentIndex);
|
|
|
|
// VFALCO TODO Rewrite to not return from the middle of the function
|
|
if (!ownerDir)
|
|
return;
|
|
|
|
BOOST_FOREACH (uint256 const & uNode, ownerDir->getFieldV256 (sfIndexes).peekValue ())
|
|
{
|
|
// VFALCO TODO rename getSLEi() to something legible.
|
|
SLE::pointer sleCur = ledger->getSLEi (uNode);
|
|
|
|
AccountItem::pointer item = mOfType->makeItem (accountID, sleCur);
|
|
|
|
// VFALCO NOTE Under what conditions would makeItem() return nullptr?
|
|
if (item)
|
|
{
|
|
mItems.push_back (item);
|
|
}
|
|
}
|
|
|
|
uint64 uNodeNext = ownerDir->getFieldU64 (sfIndexNext);
|
|
|
|
// VFALCO TODO Rewrite to not return from the middle of the function
|
|
if (!uNodeNext)
|
|
return;
|
|
|
|
currentIndex = Ledger::getDirNodeIndex (rootIndex, uNodeNext);
|
|
}
|
|
}
|
|
|
|
Json::Value AccountItems::getJson (int v)
|
|
{
|
|
Json::Value ret (Json::arrayValue);
|
|
|
|
BOOST_FOREACH (AccountItem::ref ai, mItems)
|
|
{
|
|
ret.append (ai->getJson (v));
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
// vim:ts=4
|