From 29f5763c7deebb8cd8b8ec438e9249b11538530d Mon Sep 17 00:00:00 2001 From: Romain Goyet Date: Fri, 10 Aug 2018 15:37:50 +0200 Subject: [PATCH] [poincare] TreeNode have a zero refcount by default --- poincare/include/poincare/tree_node.h | 7 ------- poincare/include/poincare/tree_pool.h | 1 + poincare/src/tree_by_reference.cpp | 2 +- poincare/src/tree_node.cpp | 4 ++-- 4 files changed, 4 insertions(+), 10 deletions(-) diff --git a/poincare/include/poincare/tree_node.h b/poincare/include/poincare/tree_node.h index 19350fb41..6aab65bb9 100644 --- a/poincare/include/poincare/tree_node.h +++ b/poincare/include/poincare/tree_node.h @@ -36,13 +36,6 @@ public: m_referenceCounter = refCount; } - void deepResetReferenceCounter() { //TODO make this method private with friends that can access it - setReferenceCounter(0); - for (TreeNode * t : depthFirstChildren()) { - t->setReferenceCounter(1); - } - } - // Ghost virtual bool isGhost() const { return false; } diff --git a/poincare/include/poincare/tree_pool.h b/poincare/include/poincare/tree_pool.h index 30ffed028..0a50bec70 100644 --- a/poincare/include/poincare/tree_pool.h +++ b/poincare/include/poincare/tree_pool.h @@ -81,6 +81,7 @@ void TreeByReference::buildGhostChildren() { renameNode(copy, false); for (TreeNode * child : copy->depthFirstChildren()) { renameNode(child, false); + child->retain(); } return copy; } diff --git a/poincare/src/tree_by_reference.cpp b/poincare/src/tree_by_reference.cpp index 177b5a842..975191092 100644 --- a/poincare/src/tree_by_reference.cpp +++ b/poincare/src/tree_by_reference.cpp @@ -24,7 +24,6 @@ TreeByReference TreeByReference::clone() const { return TreeByReference(TreePool::sharedPool()->node(allocationFailureNodeId)); } TreeNode * nodeCopy = TreePool::sharedPool()->deepCopy(myNode); - nodeCopy->deepResetReferenceCounter(); return TreeByReference(nodeCopy); } @@ -97,6 +96,7 @@ void TreeByReference::replaceWithAllocationFailureInPlace(int currentNumberOfChi //TODO static assert that the size is smaller TreeNode * newAllocationFailureNode = TreePool::sharedPool()->deepCopy(staticAllocFailNode); newAllocationFailureNode->rename(m_identifier, true); + newAllocationFailureNode->retain(); if (p.isDefined()) { assert(indexInParentNode >= 0); /* Set the refCount to previousRefCount-1 because the previous parent is diff --git a/poincare/src/tree_node.cpp b/poincare/src/tree_node.cpp index f71987353..8ec80480b 100644 --- a/poincare/src/tree_node.cpp +++ b/poincare/src/tree_node.cpp @@ -30,7 +30,7 @@ void TreeNode::rename(int identifier, bool unregisterPreviousIdentifier) { TreePool::sharedPool()->unregisterNode(this); } m_identifier = identifier; - m_referenceCounter = 1; + m_referenceCounter = 0; TreePool::sharedPool()->registerNode(this); } @@ -187,7 +187,7 @@ bool TreeNode::hasSibling(const TreeNode * e) const { TreeNode::TreeNode() : m_identifier(TreePool::NoNodeIdentifier), - m_referenceCounter(1) + m_referenceCounter(0) { }