xrpld
Loading...
Searching...
No Matches
OrderBookDBImpl.h
1#pragma once
2
3#include <xrpl/basics/UnorderedContainers.h>
4#include <xrpl/beast/utility/Journal.h>
5#include <xrpl/core/ServiceRegistry.h>
6#include <xrpl/ledger/OrderBookDB.h>
7#include <xrpl/ledger/ReadView.h>
8#include <xrpl/protocol/Asset.h>
9#include <xrpl/protocol/Book.h>
10#include <xrpl/protocol/UintTypes.h>
11
12#include <atomic>
13#include <cstdint>
14#include <functional>
15#include <memory>
16#include <mutex>
17#include <optional>
18#include <utility>
19#include <vector>
20
21namespace xrpl {
22
31
40makeOrderBookDb(ServiceRegistry& registry, OrderBookDBConfig const& config);
41
42class OrderBookDBImpl final : public OrderBookDB
43{
44public:
45 OrderBookDBImpl(ServiceRegistry& registry, OrderBookDBConfig const& config);
46
47 // OrderBookDB interface implementation
48 void
49 setup(std::shared_ptr<ReadView const> const& ledger) override;
50
51 void
52 addOrderBook(Book const& book) override;
53
55 getBooksByTakerPays(Asset const& asset, std::optional<Domain> const& domain = std::nullopt)
56 override;
57
58 int
59 getBookSize(Asset const& asset, std::optional<Domain> const& domain = std::nullopt) override;
60
61 bool
62 isBookToXRP(Asset const& asset, std::optional<Domain> const& domain = std::nullopt) override;
63
64 // OrderBookDBImpl-specific methods
65 void
67
68private:
70 int const pathSearchMax_;
71 bool const standalone_;
72
73 // Maps order books by "asset in" to "asset out":
75
77
78 // does an order book to XRP exist
80
81 // does an order book to XRP exist
83
85
87
89};
90
91} // namespace xrpl
A generic endpoint for log messages.
Definition Journal.h:44
Specifies an order book.
Definition Book.h:28
hardened_hash_map< std::pair< Asset, Domain >, hardened_hash_set< Asset > > domainBooks_
void addOrderBook(Book const &book) override
Add an order book to track.
std::vector< Book > getBooksByTakerPays(Asset const &asset, std::optional< Domain > const &domain=std::nullopt) override
Get all order books that want a specific issue.
hash_set< Asset > xrpBooks_
void setup(std::shared_ptr< ReadView const > const &ledger) override
Initialize or update the order book database with a new ledger.
bool isBookToXRP(Asset const &asset, std::optional< Domain > const &domain=std::nullopt) override
Check if an order book to XRP exists for the given issue.
OrderBookDBImpl(ServiceRegistry &registry, OrderBookDBConfig const &config)
hardened_hash_map< Asset, hardened_hash_set< Asset > > allBooks_
std::atomic< std::uint32_t > seq_
int getBookSize(Asset const &asset, std::optional< Domain > const &domain=std::nullopt) override
Get the count of order books that want a specific issue.
hash_set< std::pair< Asset, Domain > > xrpDomainBooks_
void update(std::shared_ptr< ReadView const > const &ledger)
std::recursive_mutex lock_
std::reference_wrapper< ServiceRegistry > registry_
beast::Journal const j_
Tracks order books in the ledger.
Definition OrderBookDB.h:30
Service registry for dependency injection.
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
std::unordered_set< Value, Hash, Pred, Allocator > hash_set
std::unordered_set< Value, Hash, Pred, Allocator > hardened_hash_set
std::unordered_map< Key, Value, Hash, Pred, Allocator > hardened_hash_map
std::unique_ptr< OrderBookDB > makeOrderBookDb(ServiceRegistry &registry, OrderBookDBConfig const &config)
Create an OrderBookDB instance.
Configuration for OrderBookDB.