Cleanups.

This commit is contained in:
JoelKatz
2013-07-17 19:52:35 -07:00
parent 335f2e6b3e
commit 5271a750cc
3 changed files with 14 additions and 16 deletions

View File

@@ -69,7 +69,7 @@ SHAMap::pointer SHAMap::snapShot (bool isMutable)
return ret; return ret;
} }
std::stack<SHAMapTreeNode::pointer> SHAMap::getStack (uint256 const& id, bool include_nonmatching_leaf, bool partialOk) std::stack<SHAMapTreeNode::pointer> SHAMap::getStack (uint256 const& id, bool include_nonmatching_leaf)
{ {
// Walk the tree as far as possible to the specified identifier // Walk the tree as far as possible to the specified identifier
// produce a stack of nodes along the way, with the terminal node at the top // produce a stack of nodes along the way, with the terminal node at the top
@@ -92,9 +92,6 @@ std::stack<SHAMapTreeNode::pointer> SHAMap::getStack (uint256 const& id, bool in
} }
catch (SHAMapMissingNode& mn) catch (SHAMapMissingNode& mn)
{ {
if (partialOk)
return stack;
mn.setTargetNode (id); mn.setTargetNode (id);
throw; throw;
} }
@@ -317,7 +314,8 @@ SHAMapTreeNode* SHAMap::firstBelow (SHAMapTreeNode* node)
do do
{ {
// Walk down the tree // Walk down the tree
if (node->hasItem ()) return node; if (node->hasItem ())
return node;
bool foundNode = false; bool foundNode = false;
@@ -468,10 +466,10 @@ SHAMapItem::pointer SHAMap::peekNextItem (uint256 const& id)
SHAMapItem::pointer SHAMap::peekNextItem (uint256 const& id, SHAMapTreeNode::TNType& type) SHAMapItem::pointer SHAMap::peekNextItem (uint256 const& id, SHAMapTreeNode::TNType& type)
{ {
// Get a pointer to the next item in the tree after a given item - item must be in tree // Get a pointer to the next item in the tree after a given item - item need not be in tree
boost::recursive_mutex::scoped_lock sl (mLock); boost::recursive_mutex::scoped_lock sl (mLock);
std::stack<SHAMapTreeNode::pointer> stack = getStack (id, true, false); std::stack<SHAMapTreeNode::pointer> stack = getStack (id, true);
while (!stack.empty ()) while (!stack.empty ())
{ {
@@ -494,8 +492,8 @@ SHAMapItem::pointer SHAMap::peekNextItem (uint256 const& id, SHAMapTreeNode::TNT
assert (firstNode); assert (firstNode);
firstNode = firstBelow (firstNode); firstNode = firstBelow (firstNode);
if (!firstNode) if (!firstNode || firstNode->isInner ())
throw std::runtime_error ("missing node"); throw std::runtime_error ("missing/corrupt node");
type = firstNode->getType (); type = firstNode->getType ();
return firstNode->peekItem (); return firstNode->peekItem ();
@@ -506,12 +504,12 @@ SHAMapItem::pointer SHAMap::peekNextItem (uint256 const& id, SHAMapTreeNode::TNT
return no_item; return no_item;
} }
// Get a pointer to the previous item in the tree after a given item - item must be in tree // Get a pointer to the previous item in the tree after a given item - item need not be in tree
SHAMapItem::pointer SHAMap::peekPrevItem (uint256 const& id) SHAMapItem::pointer SHAMap::peekPrevItem (uint256 const& id)
{ {
boost::recursive_mutex::scoped_lock sl (mLock); boost::recursive_mutex::scoped_lock sl (mLock);
std::stack<SHAMapTreeNode::pointer> stack = getStack (id, true, false); std::stack<SHAMapTreeNode::pointer> stack = getStack (id, true);
while (!stack.empty ()) while (!stack.empty ())
{ {
@@ -596,7 +594,7 @@ bool SHAMap::delItem (uint256 const& id)
boost::recursive_mutex::scoped_lock sl (mLock); boost::recursive_mutex::scoped_lock sl (mLock);
assert (mState != smsImmutable); assert (mState != smsImmutable);
std::stack<SHAMapTreeNode::pointer> stack = getStack (id, true, false); std::stack<SHAMapTreeNode::pointer> stack = getStack (id, true);
if (stack.empty ()) if (stack.empty ())
throw std::runtime_error ("missing node"); throw std::runtime_error ("missing node");
@@ -677,7 +675,7 @@ bool SHAMap::addGiveItem (SHAMapItem::ref item, bool isTransaction, bool hasMeta
boost::recursive_mutex::scoped_lock sl (mLock); boost::recursive_mutex::scoped_lock sl (mLock);
assert (mState != smsImmutable); assert (mState != smsImmutable);
std::stack<SHAMapTreeNode::pointer> stack = getStack (tag, true, false); std::stack<SHAMapTreeNode::pointer> stack = getStack (tag, true);
if (stack.empty ()) if (stack.empty ())
throw std::runtime_error ("missing node"); throw std::runtime_error ("missing node");
@@ -775,7 +773,7 @@ bool SHAMap::updateGiveItem (SHAMapItem::ref item, bool isTransaction, bool hasM
boost::recursive_mutex::scoped_lock sl (mLock); boost::recursive_mutex::scoped_lock sl (mLock);
assert (mState != smsImmutable); assert (mState != smsImmutable);
std::stack<SHAMapTreeNode::pointer> stack = getStack (tag, true, false); std::stack<SHAMapTreeNode::pointer> stack = getStack (tag, true);
if (stack.empty ()) if (stack.empty ())
throw std::runtime_error ("missing node"); throw std::runtime_error ("missing node");

View File

@@ -193,7 +193,7 @@ private:
static KeyCache <uint256, UptimeTimerAdapter> fullBelowCache; static KeyCache <uint256, UptimeTimerAdapter> fullBelowCache;
void dirtyUp (std::stack<SHAMapTreeNode::pointer>& stack, uint256 const & target, uint256 prevHash); void dirtyUp (std::stack<SHAMapTreeNode::pointer>& stack, uint256 const & target, uint256 prevHash);
std::stack<SHAMapTreeNode::pointer> getStack (uint256 const & id, bool include_nonmatching_leaf, bool partialOk); std::stack<SHAMapTreeNode::pointer> getStack (uint256 const & id, bool include_nonmatching_leaf);
SHAMapTreeNode::pointer walkTo (uint256 const & id, bool modify); SHAMapTreeNode::pointer walkTo (uint256 const & id, bool modify);
SHAMapTreeNode* walkToPointer (uint256 const & id); SHAMapTreeNode* walkToPointer (uint256 const & id);
SHAMapTreeNode::pointer checkCacheNode (const SHAMapNode&); SHAMapTreeNode::pointer checkCacheNode (const SHAMapNode&);

View File

@@ -571,7 +571,7 @@ void SHAMap::getFetchPack (SHAMap* have, bool includeLeaves, int max,
std::list<Blob > SHAMap::getTrustedPath (uint256 const& index) std::list<Blob > SHAMap::getTrustedPath (uint256 const& index)
{ {
boost::recursive_mutex::scoped_lock sl (mLock); boost::recursive_mutex::scoped_lock sl (mLock);
std::stack<SHAMapTreeNode::pointer> stack = SHAMap::getStack (index, false, false); std::stack<SHAMapTreeNode::pointer> stack = SHAMap::getStack (index, false);
if (stack.empty () || !stack.top ()->isLeaf ()) if (stack.empty () || !stack.top ()->isLeaf ())
throw std::runtime_error ("requested leaf not present"); throw std::runtime_error ("requested leaf not present");