Files
xahaud/src/cpp/ripple/AccountItems.cpp
2013-06-09 11:26:18 -07:00

51 lines
1.1 KiB
C++

AccountItem::AccountItem(SerializedLedgerEntry::ref ledger) : mLedgerEntry(ledger)
{
}
AccountItems::AccountItems(const uint160& accountID, Ledger::ref ledger, AccountItem::pointer ofType)
{
mOfType = ofType;
fillItems(accountID, ledger);
}
void AccountItems::fillItems(const uint160& accountID, Ledger::ref ledger)
{
uint256 rootIndex = Ledger::getOwnerDirIndex(accountID);
uint256 currentIndex = rootIndex;
while (1)
{
SLE::pointer ownerDir = ledger->getDirNode(currentIndex);
if (!ownerDir) return;
BOOST_FOREACH(uint256 const& uNode, ownerDir->getFieldV256(sfIndexes).peekValue())
{
SLE::pointer sleCur = ledger->getSLEi(uNode);
AccountItem::pointer item = mOfType->makeItem(accountID, sleCur);
if (item)
{
mItems.push_back(item);
}
}
uint64 uNodeNext = ownerDir->getFieldU64(sfIndexNext);
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