rippled
Loading...
Searching...
No Matches
SHAMapAddNode.h
1//------------------------------------------------------------------------------
2/*
3 This file is part of rippled: https://github.com/ripple/rippled
4 Copyright (c) 2012, 2013 Ripple Labs Inc.
5
6 Permission to use, copy, modify, and/or distribute this software for any
7 purpose with or without fee is hereby granted, provided that the above
8 copyright notice and this permission notice appear in all copies.
9
10 THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17*/
18//==============================================================================
19
20#ifndef RIPPLE_SHAMAP_SHAMAPADDNODE_H_INCLUDED
21#define RIPPLE_SHAMAP_SHAMAPADDNODE_H_INCLUDED
22
23#include <string>
24
25namespace ripple {
26
27// results of adding nodes
29{
30private:
31 int mGood;
32 int mBad;
34
35public:
37 void
38 incInvalid();
39 void
40 incUseful();
41 void
43 void
44 reset();
45 int
46 getGood() const;
47 bool
48 isGood() const;
49 bool
50 isInvalid() const;
51 bool
52 isUseful() const;
54 get() const;
55
57 operator+=(SHAMapAddNode const& n);
58
59 static SHAMapAddNode
60 duplicate();
61 static SHAMapAddNode
62 useful();
63 static SHAMapAddNode
64 invalid();
65
66private:
67 SHAMapAddNode(int good, int bad, int duplicate);
68};
69
70inline SHAMapAddNode::SHAMapAddNode() : mGood(0), mBad(0), mDuplicate(0)
71{
72}
73
74inline SHAMapAddNode::SHAMapAddNode(int good, int bad, int duplicate)
75 : mGood(good), mBad(bad), mDuplicate(duplicate)
76{
77}
78
79inline void
81{
82 ++mBad;
83}
84
85inline void
87{
88 ++mGood;
89}
90
91inline void
93{
94 ++mDuplicate;
95}
96
97inline void
99{
100 mGood = mBad = mDuplicate = 0;
101}
102
103inline int
105{
106 return mGood;
107}
108
109inline bool
111{
112 return mBad > 0;
113}
114
115inline bool
117{
118 return mGood > 0;
119}
120
121inline SHAMapAddNode&
123{
124 mGood += n.mGood;
125 mBad += n.mBad;
127
128 return *this;
129}
130
131inline bool
133{
134 return (mGood + mDuplicate) > mBad;
135}
136
137inline SHAMapAddNode
139{
140 return SHAMapAddNode(0, 0, 1);
141}
142
143inline SHAMapAddNode
145{
146 return SHAMapAddNode(1, 0, 0);
147}
148
149inline SHAMapAddNode
151{
152 return SHAMapAddNode(0, 1, 0);
153}
154
155inline std::string
157{
158 std::string ret;
159 if (mGood > 0)
160 {
161 ret.append("good:");
163 }
164 if (mBad > 0)
165 {
166 if (!ret.empty())
167 ret.append(" ");
168 ret.append("bad:");
170 }
171 if (mDuplicate > 0)
172 {
173 if (!ret.empty())
174 ret.append(" ");
175 ret.append("dupe:");
177 }
178 if (ret.empty())
179 ret = "no nodes processed";
180 return ret;
181}
182
183} // namespace ripple
184
185#endif
T append(T... args)
static SHAMapAddNode duplicate()
SHAMapAddNode & operator+=(SHAMapAddNode const &n)
bool isInvalid() const
static SHAMapAddNode invalid()
std::string get() const
static SHAMapAddNode useful()
T empty(T... args)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition: algorithm.h:26
T to_string(T... args)