rippled
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 <set>
7
8namespace xrpl {
9
12{
13 using return_type = void;
14
16
18 {
19 }
20
21 void
23 {
24 peer->send(msg);
25 }
26};
27
28//------------------------------------------------------------------------------
29
31template <typename Predicate>
33{
34 using return_type = void;
35
37 Predicate const& predicate;
38
39 send_if_pred(std::shared_ptr<Message> const& m, Predicate const& p) : msg(m), predicate(p)
40 {
41 }
42
43 void
45 {
46 if (predicate(peer))
47 peer->send(msg);
48 }
49};
50
52template <typename Predicate>
53send_if_pred<Predicate>
54send_if(std::shared_ptr<Message> const& m, Predicate const& f)
55{
56 return send_if_pred<Predicate>(m, f);
57}
58
59//------------------------------------------------------------------------------
60
62template <typename Predicate>
64{
65 using return_type = void;
66
68 Predicate const& predicate;
69
70 send_if_not_pred(std::shared_ptr<Message> const& m, Predicate const& p) : msg(m), predicate(p)
71 {
72 }
73
74 void
76 {
77 if (!predicate(peer))
78 peer->send(msg);
79 }
80};
81
83template <typename Predicate>
84send_if_not_pred<Predicate>
85send_if_not(std::shared_ptr<Message> const& m, Predicate const& f)
86{
87 return send_if_not_pred<Predicate>(m, f);
88}
89
90//------------------------------------------------------------------------------
91
94{
96
97 match_peer(Peer const* match = nullptr) : matchPeer(match)
98 {
99 }
100
101 bool
103 {
104 if (matchPeer && (peer.get() == matchPeer))
105 return true;
106
107 return false;
108 }
109};
110
111//------------------------------------------------------------------------------
112
115{
117
118 peer_in_cluster(Peer const* skip = nullptr) : skipPeer(skip)
119 {
120 }
121
122 bool
124 {
125 if (skipPeer(peer))
126 return false;
127
128 if (!peer->cluster())
129 return false;
130
131 return true;
132 }
133};
134
135//------------------------------------------------------------------------------
136
139{
141
143 {
144 }
145
146 bool
148 {
149 if (peerSet.count(peer->id()) == 0)
150 return false;
151
152 return true;
153 }
154};
155
156} // 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
send_if_not_pred< Predicate > send_if_not(std::shared_ptr< Message > const &m, Predicate const &f)
Helper function to aid in type deduction.
Definition predicates.h:85
send_if_pred< Predicate > send_if(std::shared_ptr< Message > const &m, Predicate const &f)
Helper function to aid in type deduction.
Definition predicates.h:54
Select the specific peer.
Definition predicates.h:94
match_peer(Peer const *match=nullptr)
Definition predicates.h:97
bool operator()(std::shared_ptr< Peer > const &peer) const
Definition predicates.h:102
Peer const * matchPeer
Definition predicates.h:95
Select all peers (except optional excluded) that are in our cluster.
Definition predicates.h:115
peer_in_cluster(Peer const *skip=nullptr)
Definition predicates.h:118
bool operator()(std::shared_ptr< Peer > const &peer) const
Definition predicates.h:123
Select all peers that are in the specified set.
Definition predicates.h:139
peer_in_set(std::set< Peer::id_t > const &peers)
Definition predicates.h:142
std::set< Peer::id_t > const & peerSet
Definition predicates.h:140
bool operator()(std::shared_ptr< Peer > const &peer) const
Definition predicates.h:147
Sends a message to all peers.
Definition predicates.h:12
void operator()(std::shared_ptr< Peer > const &peer) const
Definition predicates.h:22
std::shared_ptr< Message > const & msg
Definition predicates.h:15
send_always(std::shared_ptr< Message > const &m)
Definition predicates.h:17
Sends a message to non-matching peers.
Definition predicates.h:64
void operator()(std::shared_ptr< Peer > const &peer) const
Definition predicates.h:75
Predicate const & predicate
Definition predicates.h:68
std::shared_ptr< Message > const & msg
Definition predicates.h:67
send_if_not_pred(std::shared_ptr< Message > const &m, Predicate const &p)
Definition predicates.h:70
Sends a message to match peers.
Definition predicates.h:33
void operator()(std::shared_ptr< Peer > const &peer) const
Definition predicates.h:44
send_if_pred(std::shared_ptr< Message > const &m, Predicate const &p)
Definition predicates.h:39
std::shared_ptr< Message > const & msg
Definition predicates.h:36
Predicate const & predicate
Definition predicates.h:37