mirror of
https://github.com/Xahau/xahaud.git
synced 2025-12-06 17:27:52 +00:00
Convert OrderBookDB to ReadView
This commit is contained in:
@@ -40,7 +40,8 @@ void OrderBookDB::invalidate ()
|
||||
mSeq = 0;
|
||||
}
|
||||
|
||||
void OrderBookDB::setup (Ledger::ref ledger)
|
||||
void OrderBookDB::setup(
|
||||
std::shared_ptr<ReadView const> const& ledger)
|
||||
{
|
||||
{
|
||||
ScopedLockType sl (mLock);
|
||||
@@ -70,37 +71,8 @@ void OrderBookDB::setup (Ledger::ref ledger)
|
||||
std::bind(&OrderBookDB::update, this, ledger));
|
||||
}
|
||||
|
||||
static void updateHelper (SLE::ref entry,
|
||||
hash_set< uint256 >& seen,
|
||||
OrderBookDB::IssueToOrderBook& destMap,
|
||||
OrderBookDB::IssueToOrderBook& sourceMap,
|
||||
hash_set< Issue >& XRPBooks,
|
||||
int& books)
|
||||
{
|
||||
if (entry->getType () == ltDIR_NODE &&
|
||||
entry->isFieldPresent (sfExchangeRate) &&
|
||||
entry->getFieldH256 (sfRootIndex) == entry->getIndex())
|
||||
{
|
||||
Book book;
|
||||
book.in.currency.copyFrom (entry->getFieldH160 (sfTakerPaysCurrency));
|
||||
book.in.account.copyFrom (entry->getFieldH160 (sfTakerPaysIssuer));
|
||||
book.out.account.copyFrom (entry->getFieldH160 (sfTakerGetsIssuer));
|
||||
book.out.currency.copyFrom (entry->getFieldH160 (sfTakerGetsCurrency));
|
||||
|
||||
uint256 index = getBookBase (book);
|
||||
if (seen.insert (index).second)
|
||||
{
|
||||
auto orderBook = std::make_shared<OrderBook> (index, book);
|
||||
sourceMap[book.in].push_back (orderBook);
|
||||
destMap[book.out].push_back (orderBook);
|
||||
if (isXRP(book.out))
|
||||
XRPBooks.insert(book.in);
|
||||
++books;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void OrderBookDB::update (Ledger::pointer ledger)
|
||||
void OrderBookDB::update(
|
||||
std::shared_ptr<ReadView const> const& ledger)
|
||||
{
|
||||
hash_set< uint256 > seen;
|
||||
OrderBookDB::IssueToOrderBook destMap;
|
||||
@@ -114,9 +86,30 @@ void OrderBookDB::update (Ledger::pointer ledger)
|
||||
|
||||
try
|
||||
{
|
||||
ledger->visitStateItems(std::bind(&updateHelper, std::placeholders::_1,
|
||||
std::ref(seen), std::ref(destMap),
|
||||
std::ref(sourceMap), std::ref(XRPBooks), std::ref(books)));
|
||||
for(auto& sle : ledger->sles)
|
||||
{
|
||||
if (sle->getType () == ltDIR_NODE &&
|
||||
sle->isFieldPresent (sfExchangeRate) &&
|
||||
sle->getFieldH256 (sfRootIndex) == sle->getIndex())
|
||||
{
|
||||
Book book;
|
||||
book.in.currency.copyFrom (sle->getFieldH160 (sfTakerPaysCurrency));
|
||||
book.in.account.copyFrom (sle->getFieldH160 (sfTakerPaysIssuer));
|
||||
book.out.account.copyFrom (sle->getFieldH160 (sfTakerGetsIssuer));
|
||||
book.out.currency.copyFrom (sle->getFieldH160 (sfTakerGetsCurrency));
|
||||
|
||||
uint256 index = getBookBase (book);
|
||||
if (seen.insert (index).second)
|
||||
{
|
||||
auto orderBook = std::make_shared<OrderBook> (index, book);
|
||||
sourceMap[book.in].push_back (orderBook);
|
||||
destMap[book.out].push_back (orderBook);
|
||||
if (isXRP(book.out))
|
||||
XRPBooks.insert(book.in);
|
||||
++books;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (const SHAMapMissingNode&)
|
||||
{
|
||||
@@ -225,7 +218,8 @@ BookListeners::pointer OrderBookDB::getBookListeners (Book const& book)
|
||||
// Based on the meta, send the meta to the streams that are listening.
|
||||
// We need to determine which streams a given meta effects.
|
||||
void OrderBookDB::processTxn (
|
||||
Ledger::ref ledger, const AcceptedLedgerTx& alTx, Json::Value const& jvObj)
|
||||
std::shared_ptr<ReadView const> const& ledger,
|
||||
const AcceptedLedgerTx& alTx, Json::Value const& jvObj)
|
||||
{
|
||||
ScopedLockType sl (mLock);
|
||||
|
||||
|
||||
@@ -32,8 +32,8 @@ class OrderBookDB
|
||||
public:
|
||||
explicit OrderBookDB (Stoppable& parent);
|
||||
|
||||
void setup (Ledger::ref ledger);
|
||||
void update (Ledger::pointer ledger);
|
||||
void setup (std::shared_ptr<ReadView const> const& ledger);
|
||||
void update (std::shared_ptr<ReadView const> const& ledger);
|
||||
void invalidate ();
|
||||
|
||||
void addOrderBook(Book const&);
|
||||
@@ -53,8 +53,8 @@ public:
|
||||
|
||||
// see if this txn effects any orderbook
|
||||
void processTxn (
|
||||
Ledger::ref ledger, const AcceptedLedgerTx& alTx,
|
||||
Json::Value const& jvObj);
|
||||
std::shared_ptr<ReadView const> const& ledger,
|
||||
const AcceptedLedgerTx& alTx, Json::Value const& jvObj);
|
||||
|
||||
using IssueToOrderBook = hash_map <Issue, OrderBook::List>;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user