Some quick changes to improve pathfinding performance. (20% faster roughly)

This commit is contained in:
JoelKatz
2013-02-27 15:17:06 -08:00
parent 543fbf269a
commit 50be7dd7e4
3 changed files with 35 additions and 27 deletions

View File

@@ -11,24 +11,32 @@ AccountItem::pointer RippleState::makeItem(const uint160& accountID, SerializedL
}
RippleState::RippleState(SerializedLedgerEntry::ref ledgerEntry) : AccountItem(ledgerEntry),
mValid(false),
mViewLowest(true)
mValid(false), mViewLowest(true)
{
mFlags = mLedgerEntry->getFieldU32(sfFlags);
for (int i = 0, iMax = mLedgerEntry->getCount(); i < iMax; ++i)
{
const SerializedType* entry = mLedgerEntry->peekAtPIndex(i);
assert(entry);
mLowLimit = mLedgerEntry->getFieldAmount(sfLowLimit);
mHighLimit = mLedgerEntry->getFieldAmount(sfHighLimit);
mLowID = RippleAddress::createAccountID(mLowLimit.getIssuer());
mHighID = RippleAddress::createAccountID(mHighLimit.getIssuer());
mLowQualityIn = mLedgerEntry->getFieldU32(sfLowQualityIn);
mLowQualityOut = mLedgerEntry->getFieldU32(sfLowQualityOut);
mHighQualityIn = mLedgerEntry->getFieldU32(sfHighQualityIn);
mHighQualityOut = mLedgerEntry->getFieldU32(sfHighQualityOut);
mBalance = mLedgerEntry->getFieldAmount(sfBalance);
if (entry->getFName() == sfFlags)
mFlags = static_cast<const STUInt32*>(entry)->getValue();
else if (entry->getFName() == sfLowLimit)
{
mLowLimit = *static_cast<const STAmount*>(entry);
mLowID = RippleAddress::createAccountID(mLowLimit.getIssuer());
}
else if (entry->getFName() == sfHighLimit)
{
mHighLimit = *static_cast<const STAmount*>(entry);
mHighID = RippleAddress::createAccountID(mHighLimit.getIssuer());
}
else if (entry->getFName() == sfLowQualityIn)
mLowQualityIn = static_cast<const STUInt32*>(entry)->getValue();
else if (entry->getFName() == sfHighQualityIn)
mHighQualityIn = static_cast<const STUInt32*>(entry)->getValue();
else if (entry->getFName() == sfBalance)
mBalance = *static_cast<const STAmount*>(entry);
}
mValid = true;
}