xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
xrpld
overlay
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
9
namespace
xrpl
{
10
14
struct
SendAlways
15
{
16
using
ReturnType
= void;
17
18
std::shared_ptr<Message>
const
&
msg
;
19
20
SendAlways
(
std::shared_ptr<Message>
const
& m) :
msg
(m)
21
{
22
}
23
24
void
25
operator()
(
std::shared_ptr<Peer>
const
& peer)
const
26
{
27
peer->send(
msg
);
28
}
29
};
30
31
//------------------------------------------------------------------------------
32
36
template
<
typename
Predicate>
37
struct
SendIfPred
38
{
39
using
ReturnType
= void;
40
41
std::shared_ptr<Message>
const
&
msg
;
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
49
operator()
(
std::shared_ptr<Peer>
const
& peer)
const
50
{
51
if
(
predicate
(peer))
52
peer->send(
msg
);
53
}
54
};
55
59
template
<
typename
Predicate>
60
SendIfPred<Predicate>
61
sendIf
(
std::shared_ptr<Message>
const
& m, Predicate
const
& f)
62
{
63
return
SendIfPred<Predicate>
(m, f);
64
}
65
66
//------------------------------------------------------------------------------
67
71
template
<
typename
Predicate>
72
struct
SendIfNotPred
73
{
74
using
ReturnType
= void;
75
76
std::shared_ptr<Message>
const
&
msg
;
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
84
operator()
(
std::shared_ptr<Peer>
const
& peer)
const
85
{
86
if
(!
predicate
(peer))
87
peer->send(
msg
);
88
}
89
};
90
94
template
<
typename
Predicate>
95
SendIfNotPred<Predicate>
96
sendIfNot
(
std::shared_ptr<Message>
const
& m, Predicate
const
& f)
97
{
98
return
SendIfNotPred<Predicate>
(m, f);
99
}
100
101
//------------------------------------------------------------------------------
102
106
struct
MatchPeer
107
{
108
Peer
const
*
matchPeer
;
109
110
MatchPeer
(
Peer
const
* match =
nullptr
) :
matchPeer
(match)
111
{
112
}
113
114
bool
115
operator()
(
std::shared_ptr<Peer>
const
& peer)
const
116
{
117
return
(
matchPeer
!=
nullptr
) && (peer.
get
() ==
matchPeer
);
118
}
119
};
120
121
//------------------------------------------------------------------------------
122
126
struct
PeerInCluster
127
{
128
MatchPeer
skipPeer
;
129
130
PeerInCluster
(
Peer
const
* skip =
nullptr
) :
skipPeer
(skip)
131
{
132
}
133
134
bool
135
operator()
(
std::shared_ptr<Peer>
const
& peer)
const
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
152
struct
PeerInSet
153
{
154
std::set<Peer::ID>
const
&
peerSet
;
155
156
PeerInSet
(
std::set<Peer::ID>
const
& peers) :
peerSet
(peers)
157
{
158
}
159
160
bool
161
operator()
(
std::shared_ptr<Peer>
const
& peer)
const
162
{
163
return
peerSet
.contains(peer->id());
164
}
165
};
166
167
}
// namespace xrpl
xrpl::Peer
Represents a peer connection in the overlay.
Definition
xrpld/overlay/Peer.h:31
std::shared_ptr::get
T get(T... args)
memory
xrpl
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition
algorithm.h:5
xrpl::sendIf
SendIfPred< Predicate > sendIf(std::shared_ptr< Message > const &m, Predicate const &f)
Helper function to aid in type deduction.
Definition
predicates.h:61
xrpl::sendIfNot
SendIfNotPred< Predicate > sendIfNot(std::shared_ptr< Message > const &m, Predicate const &f)
Helper function to aid in type deduction.
Definition
predicates.h:96
set
std::shared_ptr
xrpl::MatchPeer
Select the specific peer.
Definition
predicates.h:107
xrpl::MatchPeer::matchPeer
Peer const * matchPeer
Definition
predicates.h:108
xrpl::MatchPeer::operator()
bool operator()(std::shared_ptr< Peer > const &peer) const
Definition
predicates.h:115
xrpl::MatchPeer::MatchPeer
MatchPeer(Peer const *match=nullptr)
Definition
predicates.h:110
xrpl::PeerInCluster::skipPeer
MatchPeer skipPeer
Definition
predicates.h:128
xrpl::PeerInCluster::operator()
bool operator()(std::shared_ptr< Peer > const &peer) const
Definition
predicates.h:135
xrpl::PeerInCluster::PeerInCluster
PeerInCluster(Peer const *skip=nullptr)
Definition
predicates.h:130
xrpl::PeerInSet::operator()
bool operator()(std::shared_ptr< Peer > const &peer) const
Definition
predicates.h:161
xrpl::PeerInSet::PeerInSet
PeerInSet(std::set< Peer::ID > const &peers)
Definition
predicates.h:156
xrpl::PeerInSet::peerSet
std::set< Peer::ID > const & peerSet
Definition
predicates.h:154
xrpl::SendAlways::operator()
void operator()(std::shared_ptr< Peer > const &peer) const
Definition
predicates.h:25
xrpl::SendAlways::ReturnType
void ReturnType
Definition
predicates.h:16
xrpl::SendAlways::msg
std::shared_ptr< Message > const & msg
Definition
predicates.h:18
xrpl::SendAlways::SendAlways
SendAlways(std::shared_ptr< Message > const &m)
Definition
predicates.h:20
xrpl::SendIfNotPred
Sends a message to non-matching peers.
Definition
predicates.h:73
xrpl::SendIfNotPred::predicate
Predicate const & predicate
Definition
predicates.h:77
xrpl::SendIfNotPred::msg
std::shared_ptr< Message > const & msg
Definition
predicates.h:76
xrpl::SendIfNotPred::SendIfNotPred
SendIfNotPred(std::shared_ptr< Message > const &m, Predicate const &p)
Definition
predicates.h:79
xrpl::SendIfNotPred::ReturnType
void ReturnType
Definition
predicates.h:74
xrpl::SendIfNotPred::operator()
void operator()(std::shared_ptr< Peer > const &peer) const
Definition
predicates.h:84
xrpl::SendIfPred
Sends a message to match peers.
Definition
predicates.h:38
xrpl::SendIfPred::operator()
void operator()(std::shared_ptr< Peer > const &peer) const
Definition
predicates.h:49
xrpl::SendIfPred::msg
std::shared_ptr< Message > const & msg
Definition
predicates.h:41
xrpl::SendIfPred::predicate
Predicate const & predicate
Definition
predicates.h:42
xrpl::SendIfPred::ReturnType
void ReturnType
Definition
predicates.h:39
xrpl::SendIfPred::SendIfPred
SendIfPred(std::shared_ptr< Message > const &m, Predicate const &p)
Definition
predicates.h:44
Generated by
1.17.0