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
38  incInvalid();
39  void
40  incUseful();
41  void
42  incDuplicate();
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 
66 private:
67  SHAMapAddNode(int good, int bad, int duplicate);
68 };
69 
70 inline SHAMapAddNode::SHAMapAddNode() : mGood(0), mBad(0), mDuplicate(0)
71 {
72 }
73 
74 inline SHAMapAddNode::SHAMapAddNode(int good, int bad, int duplicate)
75  : mGood(good), mBad(bad), mDuplicate(duplicate)
76 {
77 }
78 
79 inline void
81 {
82  ++mBad;
83 }
84 
85 inline void
87 {
88  ++mGood;
89 }
90 
91 inline void
93 {
94  ++mDuplicate;
95 }
96 
97 inline void
99 {
100  mGood = mBad = mDuplicate = 0;
101 }
102 
103 inline int
105 {
106  return mGood;
107 }
108 
109 inline bool
111 {
112  return mBad > 0;
113 }
114 
115 inline bool
117 {
118  return mGood > 0;
119 }
120 
121 inline SHAMapAddNode&
123 {
124  mGood += n.mGood;
125  mBad += n.mBad;
126  mDuplicate += n.mDuplicate;
127 
128  return *this;
129 }
130 
131 inline bool
133 {
134  return (mGood + mDuplicate) > mBad;
135 }
136 
137 inline SHAMapAddNode
139 {
140  return SHAMapAddNode(0, 0, 1);
141 }
142 
143 inline SHAMapAddNode
145 {
146  return SHAMapAddNode(1, 0, 0);
147 }
148 
149 inline SHAMapAddNode
151 {
152  return SHAMapAddNode(0, 1, 0);
153 }
154 
155 inline 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:");
169  ret.append(std::to_string(mBad));
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
ripple::SHAMapAddNode::reset
void reset()
Definition: SHAMapAddNode.h:98
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:156
std::string
STL class.
ripple::SHAMapAddNode::mGood
int mGood
Definition: SHAMapAddNode.h:31
ripple::SHAMapAddNode::duplicate
static SHAMapAddNode duplicate()
Definition: SHAMapAddNode.h:138
ripple::SHAMapAddNode::useful
static SHAMapAddNode useful()
Definition: SHAMapAddNode.h:144
ripple::SHAMapAddNode::isUseful
bool isUseful() const
Definition: SHAMapAddNode.h:116
ripple::SHAMapAddNode::invalid
static SHAMapAddNode invalid()
Definition: SHAMapAddNode.h:150
ripple::SHAMapAddNode::isGood
bool isGood() const
Definition: SHAMapAddNode.h:132
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:70
ripple::SHAMapAddNode::mBad
int mBad
Definition: SHAMapAddNode.h:32
ripple::SHAMapAddNode::operator+=
SHAMapAddNode & operator+=(SHAMapAddNode const &n)
Definition: SHAMapAddNode.h:122
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:80
ripple::SHAMapAddNode::incUseful
void incUseful()
Definition: SHAMapAddNode.h:86
ripple::SHAMapAddNode::getGood
int getGood() const
Definition: SHAMapAddNode.h:104
ripple::SHAMapAddNode::incDuplicate
void incDuplicate()
Definition: SHAMapAddNode.h:92
string