From c9b954dd7ce139649335d2422e3a543774b35448 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sat, 2 Feb 2013 19:08:26 -0800 Subject: [PATCH] Fix order book scaning for path finding. --- src/cpp/ripple/OrderBookDB.cpp | 55 ++++++++++++++++++++++------------ src/cpp/ripple/OrderBookDB.h | 11 +++---- 2 files changed, 42 insertions(+), 24 deletions(-) diff --git a/src/cpp/ripple/OrderBookDB.cpp b/src/cpp/ripple/OrderBookDB.cpp index 192cab703b..70d02744d2 100644 --- a/src/cpp/ripple/OrderBookDB.cpp +++ b/src/cpp/ripple/OrderBookDB.cpp @@ -1,28 +1,42 @@ -#include "OrderBookDB.h" -#include "Log.h" #include +#include "OrderBookDB.h" +#include "Log.h" + +SETUP_LOG(); // TODO: this would be way faster if we could just look under the order dirs OrderBookDB::OrderBookDB(Ledger::pointer ledger) { // walk through the entire ledger looking for orderbook entries - uint256 currentIndex=ledger->getFirstLedgerIndex(); - while(currentIndex.isNonZero()) + uint256 currentIndex = ledger->getFirstLedgerIndex(); + + cLog(lsDEBUG) << "OrderBookDB>"; + + while (currentIndex.isNonZero()) { SLE::pointer entry=ledger->getSLE(currentIndex); - OrderBook::pointer book=OrderBook::newOrderBook(entry); - if(book) + OrderBook::pointer book = OrderBook::newOrderBook(entry); + if (book) { - if( mKnownMap.find(book->getBookBase()) != mKnownMap.end() ) - { - mKnownMap[book->getBookBase()]=true; + cLog(lsDEBUG) << "OrderBookDB: found book"; - if(!book->getCurrencyIn()) - { // XRP + if (mKnownMap.find(book->getBookBase()) == mKnownMap.end()) + { + mKnownMap[book->getBookBase()] = true; + + cLog(lsDEBUG) << "OrderBookDB: unknown book in: " + << STAmount::createHumanCurrency(book->getCurrencyIn()) + << " -> " + << STAmount::createHumanCurrency(book->getCurrencyOut()); + + if (!book->getCurrencyIn()) + { + // XRP mXRPOrders.push_back(book); - }else + } + else { mIssuerMap[book->getIssuerIn()].push_back(book); } @@ -31,26 +45,29 @@ OrderBookDB::OrderBookDB(Ledger::pointer ledger) currentIndex=ledger->getNextLedgerIndex(currentIndex); } + + cLog(lsDEBUG) << "OrderBookDB<"; } // return list of all orderbooks that want IssuerID std::vector& OrderBookDB::getBooks(const uint160& issuerID) { - if( mIssuerMap.find(issuerID) == mIssuerMap.end() ) return mEmptyVector; - else return( mIssuerMap[issuerID]); + return mIssuerMap.find(issuerID) == mIssuerMap.end() + ? mEmptyVector + : mIssuerMap[issuerID]; } // return list of all orderbooks that want this issuerID and currencyID void OrderBookDB::getBooks(const uint160& issuerID, const uint160& currencyID, std::vector& bookRet) { - if( mIssuerMap.find(issuerID) == mIssuerMap.end() ) + if (mIssuerMap.find(issuerID) == mIssuerMap.end()) { BOOST_FOREACH(OrderBook::ref book, mIssuerMap[issuerID]) { - if(book->getCurrencyIn()==currencyID) - { + if (book->getCurrencyIn() == currencyID) bookRet.push_back(book); - } } } -} \ No newline at end of file +} + +// vim:ts=4 diff --git a/src/cpp/ripple/OrderBookDB.h b/src/cpp/ripple/OrderBookDB.h index ded3562ae4..de6ab96682 100644 --- a/src/cpp/ripple/OrderBookDB.h +++ b/src/cpp/ripple/OrderBookDB.h @@ -1,10 +1,10 @@ #include "Ledger.h" #include "OrderBook.h" -/* -we can eventually make this cached and just update it as transactions come in. -But for now it is probably faster to just generate it each time -*/ +// +// XXX Eventually make this cached and just update it as transactions come in. +// But, for now it is probably faster to just generate it each time. +// class OrderBookDB { @@ -19,14 +19,15 @@ public: // return list of all orderbooks that want XRP std::vector& getXRPInBooks(){ return mXRPOrders; } + // return list of all orderbooks that want IssuerID std::vector& getBooks(const uint160& issuerID); + // return list of all orderbooks that want this issuerID and currencyID void getBooks(const uint160& issuerID, const uint160& currencyID, std::vector& bookRet); // returns the best rate we can find float getPrice(uint160& currencyIn,uint160& currencyOut); - }; // vim:ts=4