diff --git a/src/cpp/ripple/SHAMap.h b/src/cpp/ripple/SHAMap.h index 4adf29b63..30ad9e52d 100644 --- a/src/cpp/ripple/SHAMap.h +++ b/src/cpp/ripple/SHAMap.h @@ -37,6 +37,9 @@ private: void setHash() const; +protected: + SHAMapNode(int depth, const uint256& id, bool) : mNodeID(id), mDepth(depth), mHash(0) { ; } + public: static const int rootDepth = 0; @@ -63,13 +66,14 @@ public: bool operator<(const SHAMapNode&) const; bool operator>(const SHAMapNode&) const; - bool operator==(const SHAMapNode&) const; - bool operator==(const uint256&) const; - bool operator!=(const SHAMapNode&) const; - bool operator!=(const uint256&) const; bool operator<=(const SHAMapNode&) const; bool operator>=(const SHAMapNode&) const; + bool operator==(const SHAMapNode& n) const { return (mDepth == n.mDepth) && (mNodeID == n.mNodeID); } + bool operator==(const uint256& n) const { return n == mNodeID; } + bool operator!=(const SHAMapNode& n) const { return (mDepth != n.mDepth) || (mNodeID != n.mNodeID); } + bool operator!=(const uint256& n) const { return n != mNodeID; } + virtual std::string getString() const; void dump() const; diff --git a/src/cpp/ripple/SHAMapNodes.cpp b/src/cpp/ripple/SHAMapNodes.cpp index f02c2eda0..31dc4441e 100644 --- a/src/cpp/ripple/SHAMapNodes.cpp +++ b/src/cpp/ripple/SHAMapNodes.cpp @@ -60,26 +60,6 @@ bool SHAMapNode::operator>=(const SHAMapNode &s) const return mNodeID >= s.mNodeID; } -bool SHAMapNode::operator==(const SHAMapNode &s) const -{ - return (s.mDepth == mDepth) && (s.mNodeID == mNodeID); -} - -bool SHAMapNode::operator!=(const SHAMapNode &s) const -{ - return (s.mDepth != mDepth) || (s.mNodeID != mNodeID); -} - -bool SHAMapNode::operator==(const uint256 &s) const -{ - return s == mNodeID; -} - -bool SHAMapNode::operator!=(const uint256 &s) const -{ - return s != mNodeID; -} - bool SMN_j = SHAMapNode::ClassInit(); bool SHAMapNode::ClassInit() @@ -102,9 +82,10 @@ uint256 SHAMapNode::getNodeID(int depth, const uint256& hash) return hash & smMasks[depth]; } -SHAMapNode::SHAMapNode(int depth, const uint256 &hash) : mNodeID(getNodeID(depth,hash)), mDepth(depth), mHash(0) +SHAMapNode::SHAMapNode(int depth, const uint256 &hash) : mNodeID(hash), mDepth(depth), mHash(0) { // canonicalize the hash to a node ID for this depth assert((depth >= 0) && (depth < 65)); + mNodeID &= smMasks[depth]; } SHAMapNode::SHAMapNode(const void *ptr, int len) : mHash(0) @@ -136,10 +117,9 @@ SHAMapNode SHAMapNode::getChildNodeID(int m) const assert((m >= 0) && (m < 16)); uint256 child(mNodeID); + child.begin()[mDepth/2] |= (mDepth & 1) ? m : (m << 4); - child.begin()[mDepth/2] |= (mDepth & 1) ? m : m << 4; - - return SHAMapNode(mDepth + 1, child); + return SHAMapNode(mDepth + 1, child, true); } int SHAMapNode::selectBranch(const uint256& hash) const