rippled
Loading...
Searching...
No Matches
predicates.h
1#ifndef XRPL_OVERLAY_PREDICATES_H_INCLUDED
2#define XRPL_OVERLAY_PREDICATES_H_INCLUDED
3
4#include <xrpld/overlay/Message.h>
5#include <xrpld/overlay/Peer.h>
6
7#include <set>
8
9namespace ripple {
10
13{
14 using return_type = void;
15
17
19 {
20 }
21
22 void
24 {
25 peer->send(msg);
26 }
27};
28
29//------------------------------------------------------------------------------
30
32template <typename Predicate>
34{
35 using return_type = void;
36
38 Predicate const& predicate;
39
40 send_if_pred(std::shared_ptr<Message> const& m, Predicate const& p)
41 : msg(m), predicate(p)
42 {
43 }
44
45 void
47 {
48 if (predicate(peer))
49 peer->send(msg);
50 }
51};
52
54template <typename Predicate>
55send_if_pred<Predicate>
56send_if(std::shared_ptr<Message> const& m, Predicate const& f)
57{
58 return send_if_pred<Predicate>(m, f);
59}
60
61//------------------------------------------------------------------------------
62
64template <typename Predicate>
66{
67 using return_type = void;
68
70 Predicate const& predicate;
71
72 send_if_not_pred(std::shared_ptr<Message> const& m, Predicate const& p)
73 : msg(m), predicate(p)
74 {
75 }
76
77 void
79 {
80 if (!predicate(peer))
81 peer->send(msg);
82 }
83};
84
86template <typename Predicate>
87send_if_not_pred<Predicate>
88send_if_not(std::shared_ptr<Message> const& m, Predicate const& f)
89{
90 return send_if_not_pred<Predicate>(m, f);
91}
92
93//------------------------------------------------------------------------------
94
97{
99
100 match_peer(Peer const* match = nullptr) : matchPeer(match)
101 {
102 }
103
104 bool
106 {
107 if (matchPeer && (peer.get() == matchPeer))
108 return true;
109
110 return false;
111 }
112};
113
114//------------------------------------------------------------------------------
115
118{
120
121 peer_in_cluster(Peer const* skip = nullptr) : skipPeer(skip)
122 {
123 }
124
125 bool
127 {
128 if (skipPeer(peer))
129 return false;
130
131 if (!peer->cluster())
132 return false;
133
134 return true;
135 }
136};
137
138//------------------------------------------------------------------------------
139
142{
144
146 {
147 }
148
149 bool
151 {
152 if (peerSet.count(peer->id()) == 0)
153 return false;
154
155 return true;
156 }
157};
158
159} // namespace ripple
160
161#endif
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:6
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:88
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:56
Select the specific peer.
Definition predicates.h:97
bool operator()(std::shared_ptr< Peer > const &peer) const
Definition predicates.h:105
match_peer(Peer const *match=nullptr)
Definition predicates.h:100
Peer const * matchPeer
Definition predicates.h:98
Select all peers (except optional excluded) that are in our cluster.
Definition predicates.h:118
bool operator()(std::shared_ptr< Peer > const &peer) const
Definition predicates.h:126
peer_in_cluster(Peer const *skip=nullptr)
Definition predicates.h:121
Select all peers that are in the specified set.
Definition predicates.h:142
peer_in_set(std::set< Peer::id_t > const &peers)
Definition predicates.h:145
std::set< Peer::id_t > const & peerSet
Definition predicates.h:143
bool operator()(std::shared_ptr< Peer > const &peer) const
Definition predicates.h:150
Sends a message to all peers.
Definition predicates.h:13
std::shared_ptr< Message > const & msg
Definition predicates.h:16
send_always(std::shared_ptr< Message > const &m)
Definition predicates.h:18
void operator()(std::shared_ptr< Peer > const &peer) const
Definition predicates.h:23
Sends a message to non-matching peers.
Definition predicates.h:66
Predicate const & predicate
Definition predicates.h:70
void operator()(std::shared_ptr< Peer > const &peer) const
Definition predicates.h:78
std::shared_ptr< Message > const & msg
Definition predicates.h:69
send_if_not_pred(std::shared_ptr< Message > const &m, Predicate const &p)
Definition predicates.h:72
Sends a message to match peers.
Definition predicates.h:34
std::shared_ptr< Message > const & msg
Definition predicates.h:37
void operator()(std::shared_ptr< Peer > const &peer) const
Definition predicates.h:46
Predicate const & predicate
Definition predicates.h:38
send_if_pred(std::shared_ptr< Message > const &m, Predicate const &p)
Definition predicates.h:40