xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
include
xrpl
core
PeerReservationTable.h
1
#pragma once
2
3
#include <xrpl/beast/hash/hash_append.h>
4
#include <xrpl/beast/hash/uhash.h>
5
#include <xrpl/beast/utility/Journal.h>
6
#include <xrpl/json/json_value.h>
7
#include <xrpl/protocol/PublicKey.h>
8
9
#include <
mutex
>
10
#include <
optional
>
11
#include <
string
>
12
#include <
unordered_set
>
13
#include <
vector
>
14
15
namespace
xrpl
{
16
17
class
DatabaseCon
;
18
19
// Value type for reservations.
20
struct
PeerReservation
final
21
{
22
public
:
23
PublicKey
nodeId
;
24
std::string
description
= {};
// NOLINT(readability-redundant-member-init)
25
26
[[nodiscard]]
auto
27
toJson
() const ->
json
::Value;
28
29
template <typename Hasher>
30
friend
void
31
hash_append
(
32
Hasher& h,
33
PeerReservation
const& x) noexcept
// NOLINT(readability-identifier-naming)
34
{
35
using
beast::hash_append
;
36
hash_append
(h, x.nodeId);
37
}
38
39
friend
bool
40
operator<
(
PeerReservation
const
& a,
PeerReservation
const
& b)
41
{
42
return
a.
nodeId
< b.
nodeId
;
43
}
44
};
45
46
// TODO: When C++20 arrives, take advantage of "equivalence" instead of
47
// "equality". Add an overload for `(PublicKey, PeerReservation)`, and just
48
// pass a `PublicKey` directly to `unordered_set.find`.
49
struct
KeyEqual
final
50
{
51
bool
52
operator()
(
PeerReservation
const
& lhs,
PeerReservation
const
& rhs)
const
53
{
54
return
lhs.
nodeId
== rhs.
nodeId
;
55
}
56
};
57
58
class
PeerReservationTable
final
59
{
60
public
:
61
explicit
PeerReservationTable
(
62
beast::Journal
journal =
beast::Journal
(
beast::Journal::getNullSink
()))
63
:
journal_
(journal)
64
{
65
}
66
67
std::vector<PeerReservation>
68
list
()
const
;
69
70
bool
71
contains
(
PublicKey
const
& nodeId)
72
{
73
std::scoped_lock
const
lock(this->
mutex_
);
74
return
table_
.contains({.nodeId = nodeId, .description = {}});
75
}
76
77
// Because `ApplicationImp` has two-phase initialization, so must we.
78
// Our dependencies are not prepared until the second phase.
79
bool
80
load
(
DatabaseCon
& connection);
81
86
std::optional<PeerReservation>
87
insertOrAssign
(
PeerReservation
const
& reservation);
88
92
std::optional<PeerReservation>
93
erase
(
PublicKey
const
& nodeId);
94
95
private
:
96
beast::Journal
mutable
journal_
;
97
std::mutex
mutable
mutex_
;
98
DatabaseCon
*
connection_
{};
99
std::unordered_set<PeerReservation, beast::Uhash<>
,
KeyEqual
>
table_
;
100
};
101
102
}
// namespace xrpl
std::string
beast::Journal
A generic endpoint for log messages.
Definition
Journal.h:44
beast::Journal::getNullSink
static Sink & getNullSink()
Returns a Sink which does nothing.
Definition
beast_Journal.cpp:63
xrpl::DatabaseCon
Definition
DatabaseCon.h:74
xrpl::PeerReservationTable::list
std::vector< PeerReservation > list() const
Definition
PeerReservationTable.cpp:31
xrpl::PeerReservationTable::PeerReservationTable
PeerReservationTable(beast::Journal journal=beast::Journal(beast::Journal::getNullSink()))
Definition
PeerReservationTable.h:61
xrpl::PeerReservationTable::insertOrAssign
std::optional< PeerReservation > insertOrAssign(PeerReservation const &reservation)
Definition
PeerReservationTable.cpp:63
xrpl::PeerReservationTable::contains
bool contains(PublicKey const &nodeId)
Definition
PeerReservationTable.h:71
xrpl::PeerReservationTable::mutex_
std::mutex mutex_
Definition
PeerReservationTable.h:97
xrpl::PeerReservationTable::erase
std::optional< PeerReservation > erase(PublicKey const &nodeId)
Definition
PeerReservationTable.cpp:97
xrpl::PeerReservationTable::journal_
beast::Journal journal_
Definition
PeerReservationTable.h:96
xrpl::PeerReservationTable::connection_
DatabaseCon * connection_
Definition
PeerReservationTable.h:98
xrpl::PeerReservationTable::table_
std::unordered_set< PeerReservation, beast::Uhash<>, KeyEqual > table_
Definition
PeerReservationTable.h:99
xrpl::PeerReservationTable::load
bool load(DatabaseCon &connection)
Definition
PeerReservationTable.cpp:50
xrpl::PublicKey
A public key.
Definition
PublicKey.h:53
mutex
beast::hash_append
void hash_append(Hasher &h, T const &t) noexcept
Logically concatenate input data to a Hasher.
Definition
hash_append.h:206
json
JSON (JavaScript Object Notation).
Definition
json_errors.h:5
xrpl
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition
algorithm.h:5
optional
std::scoped_lock
string
xrpl::KeyEqual
Definition
PeerReservationTable.h:50
xrpl::KeyEqual::operator()
bool operator()(PeerReservation const &lhs, PeerReservation const &rhs) const
Definition
PeerReservationTable.h:52
xrpl::PeerReservation
Definition
PeerReservationTable.h:21
xrpl::PeerReservation::operator<
friend bool operator<(PeerReservation const &a, PeerReservation const &b)
Definition
PeerReservationTable.h:40
xrpl::PeerReservation::hash_append
friend void hash_append(Hasher &h, PeerReservation const &x) noexcept
Definition
PeerReservationTable.h:31
xrpl::PeerReservation::nodeId
PublicKey nodeId
Definition
PeerReservationTable.h:23
xrpl::PeerReservation::toJson
auto toJson() const -> json::Value
Definition
PeerReservationTable.cpp:19
xrpl::PeerReservation::description
std::string description
Definition
PeerReservationTable.h:24
unordered_set
vector
Generated by
1.17.0