xrpld
Loading...
Searching...
No Matches
predicates.h
1#pragma once
2
3#include <xrpld/overlay/Message.h>
4#include <xrpld/overlay/Peer.h>
5
6#include <memory>
7#include <set>
8
9namespace xrpl {
10
15{
16 using return_type = void;
17
19
21 {
22 }
23
24 void
26 {
27 peer->send(msg);
28 }
29};
30
31//------------------------------------------------------------------------------
32
36template <typename Predicate>
38{
39 using return_type = void;
40
42 Predicate const& predicate;
43
44 SendIfPred(std::shared_ptr<Message> const& m, Predicate const& p) : msg(m), predicate(p)
45 {
46 }
47
48 void
50 {
51 if (predicate(peer))
52 peer->send(msg);
53 }
54};
55
59template <typename Predicate>
60SendIfPred<Predicate>
61sendIf(std::shared_ptr<Message> const& m, Predicate const& f)
62{
63 return SendIfPred<Predicate>(m, f);
64}
65
66//------------------------------------------------------------------------------
67
71template <typename Predicate>
73{
74 using return_type = void;
75
77 Predicate const& predicate;
78
79 SendIfNotPred(std::shared_ptr<Message> const& m, Predicate const& p) : msg(m), predicate(p)
80 {
81 }
82
83 void
85 {
86 if (!predicate(peer))
87 peer->send(msg);
88 }
89};
90
94template <typename Predicate>
95SendIfNotPred<Predicate>
96sendIfNot(std::shared_ptr<Message> const& m, Predicate const& f)
97{
98 return SendIfNotPred<Predicate>(m, f);
99}
100
101//------------------------------------------------------------------------------
102
107{
109
110 MatchPeer(Peer const* match = nullptr) : matchPeer(match)
111 {
112 }
113
114 bool
116 {
117 return (matchPeer != nullptr) && (peer.get() == matchPeer);
118 }
119};
120
121//------------------------------------------------------------------------------
122
127{
129
130 PeerInCluster(Peer const* skip = nullptr) : skipPeer(skip)
131 {
132 }
133
134 bool
136 {
137 if (skipPeer(peer))
138 return false;
139
140 if (!peer->cluster())
141 return false;
142
143 return true;
144 }
145};
146
147//------------------------------------------------------------------------------
148
153{
155
157 {
158 }
159
160 bool
162 {
163 return peerSet.contains(peer->id());
164 }
165};
166
167} // namespace xrpl
Represents a peer connection in the overlay.
T get(T... args)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
SendIfPred< Predicate > sendIf(std::shared_ptr< Message > const &m, Predicate const &f)
Helper function to aid in type deduction.
Definition predicates.h:61
SendIfNotPred< Predicate > sendIfNot(std::shared_ptr< Message > const &m, Predicate const &f)
Helper function to aid in type deduction.
Definition predicates.h:96
Select the specific peer.
Definition predicates.h:107
Peer const * matchPeer
Definition predicates.h:108
bool operator()(std::shared_ptr< Peer > const &peer) const
Definition predicates.h:115
MatchPeer(Peer const *match=nullptr)
Definition predicates.h:110
bool operator()(std::shared_ptr< Peer > const &peer) const
Definition predicates.h:135
PeerInCluster(Peer const *skip=nullptr)
Definition predicates.h:130
bool operator()(std::shared_ptr< Peer > const &peer) const
Definition predicates.h:161
PeerInSet(std::set< Peer::id_t > const &peers)
Definition predicates.h:156
std::set< Peer::id_t > const & peerSet
Definition predicates.h:154
void operator()(std::shared_ptr< Peer > const &peer) const
Definition predicates.h:25
std::shared_ptr< Message > const & msg
Definition predicates.h:18
SendAlways(std::shared_ptr< Message > const &m)
Definition predicates.h:20
Sends a message to non-matching peers.
Definition predicates.h:73
Predicate const & predicate
Definition predicates.h:77
std::shared_ptr< Message > const & msg
Definition predicates.h:76
SendIfNotPred(std::shared_ptr< Message > const &m, Predicate const &p)
Definition predicates.h:79
void operator()(std::shared_ptr< Peer > const &peer) const
Definition predicates.h:84
Sends a message to match peers.
Definition predicates.h:38
void operator()(std::shared_ptr< Peer > const &peer) const
Definition predicates.h:49
std::shared_ptr< Message > const & msg
Definition predicates.h:41
Predicate const & predicate
Definition predicates.h:42
SendIfPred(std::shared_ptr< Message > const &m, Predicate const &p)
Definition predicates.h:44