diff --git a/poincare/include/poincare/tree_handle.h b/poincare/include/poincare/tree_handle.h index 68f99b41a..5e2a07d9b 100644 --- a/poincare/include/poincare/tree_handle.h +++ b/poincare/include/poincare/tree_handle.h @@ -128,7 +128,7 @@ protected: void setIdentifierAndRetain(uint16_t newId); void setTo(const TreeHandle & tr); - static bool hasNode(uint16_t identifier) { return identifier < TreeNode::NoNodeIdentifier; } + static bool hasNode(uint16_t identifier) { return TreeNode::IsValidIdentifier(identifier); } /* Hierarchy operations */ // Add diff --git a/poincare/include/poincare/tree_node.h b/poincare/include/poincare/tree_node.h index f46d6ff9a..71d1df351 100644 --- a/poincare/include/poincare/tree_node.h +++ b/poincare/include/poincare/tree_node.h @@ -172,6 +172,8 @@ public: void log(std::ostream & stream, bool recursive = true); #endif + static bool IsValidIdentifier(uint16_t id) { return id < NoNodeIdentifier; } + protected: TreeNode() : m_identifier(NoNodeIdentifier), diff --git a/poincare/include/poincare/tree_pool.h b/poincare/include/poincare/tree_pool.h index 463c41ec8..0da0d8f80 100644 --- a/poincare/include/poincare/tree_pool.h +++ b/poincare/include/poincare/tree_pool.h @@ -27,7 +27,7 @@ public: // Node TreeNode * node(uint16_t identifier) const { - assert(identifier >= 0 && identifier < MaxNumberOfNodes); + assert(TreeNode::IsValidIdentifier(identifier) && identifier < MaxNumberOfNodes); if (m_nodeForIdentifierOffset[identifier] != UINT16_MAX) { return const_cast(reinterpret_cast(m_alignedBuffer + m_nodeForIdentifierOffset[identifier])); } @@ -125,7 +125,7 @@ private: } } void push(uint16_t i) { - assert(m_currentIndex >= 0 && m_currentIndex < MaxNumberOfNodes); + assert(TreeNode::IsValidIdentifier(m_currentIndex) && m_currentIndex < MaxNumberOfNodes); m_availableIdentifiers[m_currentIndex++] = i; } uint16_t pop() { diff --git a/poincare/src/tree_pool.cpp b/poincare/src/tree_pool.cpp index 00895e05d..7ab75d0d7 100644 --- a/poincare/src/tree_pool.cpp +++ b/poincare/src/tree_pool.cpp @@ -14,7 +14,7 @@ namespace Poincare { TreePool * TreePool::SharedStaticPool = nullptr; void TreePool::freeIdentifier(uint16_t identifier) { - if (identifier >= 0 && identifier < MaxNumberOfNodes) { + if (TreeNode::IsValidIdentifier(identifier) && identifier < MaxNumberOfNodes) { m_nodeForIdentifierOffset[identifier] = UINT16_MAX; m_identifiers.push(identifier); }