rippled
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 
25 namespace ripple {
26 
27 // results of adding nodes
29 {
30 private:
31  int mGood;
32  int mBad;
34 
35 public:
36  SHAMapAddNode ();
37  void incInvalid ();
38  void incUseful ();
39  void incDuplicate ();
40  void reset ();
41  int getGood () const;
42  bool isGood () const;
43  bool isInvalid () const;
44  bool isUseful () const;
45  std::string get () const;
46 
48 
49  static SHAMapAddNode duplicate ();
50  static SHAMapAddNode useful ();
51  static SHAMapAddNode invalid ();
52 
53 private:
54  SHAMapAddNode (int good, int bad, int duplicate);
55 };
56 
57 inline
59  : mGood (0)
60  , mBad (0)
61  , mDuplicate (0)
62 {
63 }
64 
65 inline
66 SHAMapAddNode::SHAMapAddNode (int good, int bad, int duplicate)
67  : mGood (good)
68  , mBad (bad)
69  , mDuplicate (duplicate)
70 {
71 }
72 
73 inline
74 void
76 {
77  ++mBad;
78 }
79 
80 inline
81 void
83 {
84  ++mGood;
85 }
86 
87 inline
88 void
90 {
91  ++mDuplicate;
92 }
93 
94 inline
95 void
97 {
98  mGood = mBad = mDuplicate = 0;
99 }
100 
101 inline
102 int
104 {
105  return mGood;
106 }
107 
108 inline
109 bool
111 {
112  return mBad > 0;
113 }
114 
115 inline
116 bool
118 {
119  return mGood > 0;
120 }
121 
122 inline
125 {
126  mGood += n.mGood;
127  mBad += n.mBad;
128  mDuplicate += n.mDuplicate;
129 
130  return *this;
131 }
132 
133 inline
134 bool
136 {
137  return (mGood + mDuplicate) > mBad;
138 }
139 
140 inline
143 {
144  return SHAMapAddNode (0, 0, 1);
145 }
146 
147 inline
150 {
151  return SHAMapAddNode (1, 0, 0);
152 }
153 
154 inline
157 {
158  return SHAMapAddNode (0, 1, 0);
159 }
160 
161 inline
164 {
165  std::string ret;
166  if (mGood > 0)
167  {
168  ret.append("good:");
170  }
171  if (mBad > 0)
172  {
173  if (!ret.empty())
174  ret.append(" ");
175  ret.append("bad:");
176  ret.append(std::to_string(mBad));
177  }
178  if (mDuplicate > 0)
179  {
180  if (!ret.empty())
181  ret.append(" ");
182  ret.append("dupe:");
184  }
185  if (ret.empty ())
186  ret = "no nodes processed";
187  return ret;
188 }
189 
190 }
191 
192 #endif
ripple::SHAMapAddNode::reset
void reset()
Definition: SHAMapAddNode.h:96
ripple::SHAMapAddNode::mDuplicate
int mDuplicate
Definition: SHAMapAddNode.h:33
ripple::SHAMapAddNode
Definition: SHAMapAddNode.h:28
ripple::SHAMapAddNode::get
std::string get() const
Definition: SHAMapAddNode.h:163
std::string
STL class.
ripple::SHAMapAddNode::mGood
int mGood
Definition: SHAMapAddNode.h:31
ripple::SHAMapAddNode::duplicate
static SHAMapAddNode duplicate()
Definition: SHAMapAddNode.h:142
ripple::SHAMapAddNode::useful
static SHAMapAddNode useful()
Definition: SHAMapAddNode.h:149
ripple::SHAMapAddNode::isUseful
bool isUseful() const
Definition: SHAMapAddNode.h:117
ripple::SHAMapAddNode::invalid
static SHAMapAddNode invalid()
Definition: SHAMapAddNode.h:156
ripple::SHAMapAddNode::isGood
bool isGood() const
Definition: SHAMapAddNode.h:135
std::to_string
T to_string(T... args)
ripple::SHAMapAddNode::isInvalid
bool isInvalid() const
Definition: SHAMapAddNode.h:110
ripple::SHAMapAddNode::SHAMapAddNode
SHAMapAddNode()
Definition: SHAMapAddNode.h:58
ripple::SHAMapAddNode::mBad
int mBad
Definition: SHAMapAddNode.h:32
ripple::SHAMapAddNode::operator+=
SHAMapAddNode & operator+=(SHAMapAddNode const &n)
Definition: SHAMapAddNode.h:124
std::string::append
T append(T... args)
ripple
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition: RCLCensorshipDetector.h:29
std::string::empty
T empty(T... args)
ripple::SHAMapAddNode::incInvalid
void incInvalid()
Definition: SHAMapAddNode.h:75
ripple::SHAMapAddNode::incUseful
void incUseful()
Definition: SHAMapAddNode.h:82
ripple::SHAMapAddNode::getGood
int getGood() const
Definition: SHAMapAddNode.h:103
ripple::SHAMapAddNode::incDuplicate
void incDuplicate()
Definition: SHAMapAddNode.h:89
string