From 9e84bb38a8ca9f2e3ce9d7045f74634685657f1a Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sun, 14 Oct 2012 23:14:17 -0700 Subject: [PATCH] Add new 'isEmpty' function to find empty inner nodes. --- src/SHAMap.h | 1 + src/SHAMapNodes.cpp | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/SHAMap.h b/src/SHAMap.h index 079ddf0c0c..6d579a918d 100644 --- a/src/SHAMap.h +++ b/src/SHAMap.h @@ -195,6 +195,7 @@ public: bool isInnerNode() const { return !mItem; } bool setChildHash(int m, const uint256& hash); bool isEmptyBranch(int m) const { return !mHashes[m]; } + bool isEmpty() const; int getBranchCount() const; void makeInner(); const uint256& getChildHash(int m) const diff --git a/src/SHAMapNodes.cpp b/src/SHAMapNodes.cpp index db35686759..12f4c956e1 100644 --- a/src/SHAMapNodes.cpp +++ b/src/SHAMapNodes.cpp @@ -364,7 +364,7 @@ void SHAMapTreeNode::addRaw(Serializer& s, SHANodeFormat format) if (mType == tnINNER) { - assert(getBranchCount() != 0); + assert(!isEmpty()); if (format == snfPREFIX) { s.add32(sHP_InnerNode); @@ -453,6 +453,14 @@ SHAMapItem::pointer SHAMapTreeNode::getItem() const return boost::make_shared(*mItem); } +bool SHAMapTreeNode::isEmpty() const +{ + assert(isInner()); + for (int i = 0; i < 16; ++i) + if (mHashes[i].isNonZero()) return false; + return true; +} + int SHAMapTreeNode::getBranchCount() const { assert(isInner());