xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
xrpld
app
ledger
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
21
namespace
xrpl
{
22
26
struct
OrderBookDBConfig
27
{
28
int
pathSearchMax
;
29
bool
standalone
;
30
};
31
39
std::unique_ptr<OrderBookDB>
40
makeOrderBookDb
(
ServiceRegistry
& registry,
OrderBookDBConfig
const
& config);
41
42
class
OrderBookDBImpl
final :
public
OrderBookDB
43
{
44
public
:
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
54
std::vector<Book>
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
66
update
(
std::shared_ptr<ReadView const>
const
& ledger);
67
68
private
:
69
std::reference_wrapper<ServiceRegistry>
registry_
;
70
int
const
pathSearchMax_
;
71
bool
const
standalone_
;
72
73
// Maps order books by "asset in" to "asset out":
74
HardenedHashMap<Asset, HardenedHashSet<Asset>
>
allBooks_
;
75
76
HardenedHashMap<std::pair<Asset, Domain>
,
HardenedHashSet<Asset>
>
domainBooks_
;
77
78
// does an order book to XRP exist
79
HashSet<Asset>
xrpBooks_
;
80
81
// does an order book to XRP exist
82
HashSet<std::pair<Asset, Domain>
>
xrpDomainBooks_
;
83
84
std::recursive_mutex
lock_
;
85
86
std::atomic<std::uint32_t>
seq_
;
87
88
beast::Journal
const
j_
;
89
};
90
91
}
// namespace xrpl
atomic
beast::Journal
A generic endpoint for log messages.
Definition
Journal.h:44
xrpl::Asset
Definition
Asset.h:52
xrpl::Book
Specifies an order book.
Definition
Book.h:28
xrpl::OrderBookDBImpl::addOrderBook
void addOrderBook(Book const &book) override
Add an order book to track.
Definition
OrderBookDBImpl.cpp:222
xrpl::OrderBookDBImpl::xrpBooks_
HashSet< Asset > xrpBooks_
Definition
OrderBookDBImpl.h:79
xrpl::OrderBookDBImpl::getBooksByTakerPays
std::vector< Book > getBooksByTakerPays(Asset const &asset, std::optional< Domain > const &domain=std::nullopt) override
Get all order books that want a specific issue.
Definition
OrderBookDBImpl.cpp:249
xrpl::OrderBookDBImpl::setup
void setup(std::shared_ptr< ReadView const > const &ledger) override
Initialize or update the order book database with a new ledger.
Definition
OrderBookDBImpl.cpp:49
xrpl::OrderBookDBImpl::isBookToXRP
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.
Definition
OrderBookDBImpl.cpp:300
xrpl::OrderBookDBImpl::xrpDomainBooks_
HashSet< std::pair< Asset, Domain > > xrpDomainBooks_
Definition
OrderBookDBImpl.h:82
xrpl::OrderBookDBImpl::OrderBookDBImpl
OrderBookDBImpl(ServiceRegistry ®istry, OrderBookDBConfig const &config)
Definition
OrderBookDBImpl.cpp:33
xrpl::OrderBookDBImpl::seq_
std::atomic< std::uint32_t > seq_
Definition
OrderBookDBImpl.h:86
xrpl::OrderBookDBImpl::domainBooks_
HardenedHashMap< std::pair< Asset, Domain >, HardenedHashSet< Asset > > domainBooks_
Definition
OrderBookDBImpl.h:76
xrpl::OrderBookDBImpl::getBookSize
int getBookSize(Asset const &asset, std::optional< Domain > const &domain=std::nullopt) override
Get the count of order books that want a specific issue.
Definition
OrderBookDBImpl.cpp:281
xrpl::OrderBookDBImpl::update
void update(std::shared_ptr< ReadView const > const &ledger)
Definition
OrderBookDBImpl.cpp:92
xrpl::OrderBookDBImpl::lock_
std::recursive_mutex lock_
Definition
OrderBookDBImpl.h:84
xrpl::OrderBookDBImpl::pathSearchMax_
int const pathSearchMax_
Definition
OrderBookDBImpl.h:70
xrpl::OrderBookDBImpl::registry_
std::reference_wrapper< ServiceRegistry > registry_
Definition
OrderBookDBImpl.h:69
xrpl::OrderBookDBImpl::standalone_
bool const standalone_
Definition
OrderBookDBImpl.h:71
xrpl::OrderBookDBImpl::allBooks_
HardenedHashMap< Asset, HardenedHashSet< Asset > > allBooks_
Definition
OrderBookDBImpl.h:74
xrpl::OrderBookDBImpl::j_
beast::Journal const j_
Definition
OrderBookDBImpl.h:88
xrpl::OrderBookDB
Tracks order books in the ledger.
Definition
OrderBookDB.h:30
xrpl::ServiceRegistry
Service registry for dependency injection.
Definition
ServiceRegistry.h:98
cstdint
functional
memory
mutex
xrpl
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition
algorithm.h:5
xrpl::HardenedHashSet
std::unordered_set< Value, Hash, Pred, Allocator > HardenedHashSet
Definition
UnorderedContainers.h:93
xrpl::HardenedHashMap
std::unordered_map< Key, Value, Hash, Pred, Allocator > HardenedHashMap
Definition
UnorderedContainers.h:70
xrpl::HashSet
std::unordered_set< Value, Hash, Pred, Allocator > HashSet
Definition
UnorderedContainers.h:51
xrpl::makeOrderBookDb
std::unique_ptr< OrderBookDB > makeOrderBookDb(ServiceRegistry ®istry, OrderBookDBConfig const &config)
Create an OrderBookDB instance.
Definition
OrderBookDBImpl.cpp:43
optional
std::recursive_mutex
std::reference_wrapper
std::shared_ptr
xrpl::OrderBookDBConfig
Configuration for OrderBookDB.
Definition
OrderBookDBImpl.h:27
xrpl::OrderBookDBConfig::pathSearchMax
int pathSearchMax
Definition
OrderBookDBImpl.h:28
xrpl::OrderBookDBConfig::standalone
bool standalone
Definition
OrderBookDBImpl.h:29
std::unique_ptr
utility
vector
Generated by
1.17.0