From 970554f9b8910ef1a1999def91b5e8a129be6bc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Thu, 6 Sep 2018 10:10:54 +0200 Subject: [PATCH] [poincare] Allow construction of a TreeRef from nullptr node --- poincare/include/poincare/layout_reference.h | 10 ++++++++-- poincare/include/poincare/tree_by_reference.h | 7 ++++--- poincare/src/layout_node.cpp | 6 +----- poincare/src/layout_reference.cpp | 6 ------ 4 files changed, 13 insertions(+), 16 deletions(-) diff --git a/poincare/include/poincare/layout_reference.h b/poincare/include/poincare/layout_reference.h index 103b76c46..22161ec51 100644 --- a/poincare/include/poincare/layout_reference.h +++ b/poincare/include/poincare/layout_reference.h @@ -83,8 +83,14 @@ public: TreeByReference treeRefChild = TreeByReference::childAtIndex(i); return LayoutReference(static_cast(treeRefChild.node())); } - LayoutReference root() const; - LayoutReference parent() const { return isUninitialized() ? LayoutReference() : LayoutReference(node()->parent()); } + LayoutReference root() const { + assert(!isUninitialized()); + return LayoutReference(node()->root()); + } + LayoutReference parent() const { + assert(!isUninitialized()); + return LayoutReference(node()->parent()); + } // Tree modification //Add diff --git a/poincare/include/poincare/tree_by_reference.h b/poincare/include/poincare/tree_by_reference.h index 9b3b59638..4a512d65c 100644 --- a/poincare/include/poincare/tree_by_reference.h +++ b/poincare/include/poincare/tree_by_reference.h @@ -88,9 +88,10 @@ public: protected: /* Constructor */ - TreeByReference(const TreeNode * node) { - assert(node != nullptr); - setIdentifierAndRetain(node->identifier()); + TreeByReference(const TreeNode * node) : TreeByReference() { + if (node != nullptr) { + setIdentifierAndRetain(node->identifier()); + } } TreeByReference(int nodeIndentifier = TreePool::NoNodeIdentifier) : m_identifier(nodeIndentifier) {} void setIdentifierAndRetain(int newId) { diff --git a/poincare/src/layout_node.cpp b/poincare/src/layout_node.cpp index ee735f2a1..5d5dddcca 100644 --- a/poincare/src/layout_node.cpp +++ b/poincare/src/layout_node.cpp @@ -228,12 +228,8 @@ void LayoutNode::scoreCursorInDescendantsVertically ( } bool LayoutNode::changeGreySquaresOfAllMatrixAncestors(bool add) { - LayoutNode * p = parent(); - if (p == nullptr) { - return false; - } bool changedSquares = false; - LayoutRef currentAncestor = LayoutRef(p); + LayoutRef currentAncestor = LayoutRef(parent()); while (!currentAncestor.isUninitialized()) { if (currentAncestor.isMatrix()) { if (add) { diff --git a/poincare/src/layout_reference.cpp b/poincare/src/layout_reference.cpp index 8292cf503..39a987473 100644 --- a/poincare/src/layout_reference.cpp +++ b/poincare/src/layout_reference.cpp @@ -19,12 +19,6 @@ LayoutCursor LayoutReference::equivalentCursor(LayoutCursor * cursor) { return node()->equivalentCursor(cursor); } -LayoutReference LayoutReference::root() const { - assert(!isUninitialized()); - LayoutNode * r = node()->root(); - return r == nullptr ? LayoutReference() : LayoutReference(r); -} - // Tree modification void LayoutReference::replaceChild(LayoutRef oldChild, LayoutRef newChild, LayoutCursor * cursor, bool force) {