[poincare] TreeNodes have a m_numberOfChildren argument

This commit is contained in:
Léa Saviot
2018-07-26 09:58:32 +02:00
parent bf89edf493
commit aa2d58c14a
17 changed files with 13 additions and 60 deletions

View File

@@ -22,7 +22,6 @@ public:
// TreeNode
size_t size() const override { return sizeof(AllocationFailedLayoutNode); }
const char * description() const override { return "Allocation Failed"; }
int numberOfChildren() const override { return 0; }
bool isAllocationFailure() const override { return true; }
protected:

View File

@@ -22,7 +22,6 @@ public:
// TreeNode
size_t size() const override { return sizeof(BinomialCoefficientLayoutNode); }
int numberOfChildren() const override { return 2; }
#if TREE_LOG
const char * description() const override {
return "BinomialCoefficientLayout";

View File

@@ -22,7 +22,6 @@ public:
// TreeNode
size_t size() const override { return sizeof(BracketLayoutNode); }
int numberOfChildren() const override { return 0; }
#if TREE_LOG
const char * description() const override { return "BracketLayout"; }
#endif

View File

@@ -24,7 +24,6 @@ public:
// TreeNode
size_t size() const override { return sizeof(BracketPairLayoutNode); }
int numberOfChildren() const override { return 1; }
#if TREE_LOG
const char * description() const override { return "BracketPairLayout"; }
#endif

View File

@@ -28,7 +28,6 @@ public:
// TreeNode
size_t size() const override { return sizeof(CharLayoutNode); }
int numberOfChildren() const override { return 0; }
#if TREE_LOG
const char * description() const override {
static char Description[] = "Char a";

View File

@@ -27,7 +27,6 @@ public:
// TreeNode
size_t size() const override { return sizeof(CondensedSumLayoutNode); }
int numberOfChildren() const override { return 3; }
#if TREE_LOG
const char * description() const override {
return "CondensedSumLayout";

View File

@@ -19,7 +19,6 @@ public:
// TreeNode
size_t size() const override { return sizeof(ConjugateLayoutNode); }
int numberOfChildren() const override { return 1; }
#if TREE_LOG
const char * description() const override {
return "ConjugateLayout";

View File

@@ -39,7 +39,6 @@ public:
// TreeNode
size_t size() const override { return sizeof(EmptyLayoutNode); }
int numberOfChildren() const override { return 0; }
#if TREE_LOG
const char * description() const override { return "Empty"; }
#endif

View File

@@ -33,7 +33,6 @@ public:
// TreeNode
size_t size() const override { return sizeof(FractionLayoutNode); }
int numberOfChildren() const override { return 2; }
#if TREE_LOG
const char * description() const override {
return "FractionLayout";

View File

@@ -17,7 +17,6 @@ class GridLayoutNode : public LayoutNode {
public:
GridLayoutNode() :
LayoutNode(),
m_numberOfChildren(0),
m_numberOfRows(0),
m_numberOfColumns(0)
{}
@@ -40,20 +39,8 @@ public:
// TreeNode
size_t size() const override { return sizeof(GridLayoutNode); }
int numberOfChildren() const override { return m_numberOfChildren; }
void incrementNumberOfChildren(int increment = 1) override {
assert(increment >= 0);
m_numberOfChildren += increment;
}
void decrementNumberOfChildren(int decrement = 1) override {
m_numberOfChildren -= decrement;
if (m_numberOfChildren < 0) {
m_numberOfChildren = 0;
}
}
void eraseNumberOfChildren() override {
m_numberOfChildren = 0;
LayoutNode::eraseNumberOfChildren();
m_numberOfRows = 0;
m_numberOfColumns = 0;
}
@@ -76,7 +63,6 @@ protected:
int rowAtChildIndex(int index) const;
int columnAtChildIndex(int index) const;
int indexAtRowColumn(int rowIndex, int columnIndex) const;
int m_numberOfChildren;
int m_numberOfRows;
int m_numberOfColumns;

View File

@@ -14,10 +14,7 @@ class HorizontalLayoutNode : public LayoutNode {
template <typename T>
friend class LayoutReference;
public:
HorizontalLayoutNode() :
LayoutNode(),
m_numberOfChildren(0)
{}
using LayoutNode::LayoutNode;
// LayoutNode
void moveCursorLeft(LayoutCursor * cursor, bool * shouldRecomputeLayout) override;
@@ -27,18 +24,11 @@ public:
int writeTextInBuffer(char * buffer, int bufferSize, PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override;
bool isHorizontal() const override { return true; }
bool isEmpty() const override { return m_numberOfChildren == 1 && const_cast<HorizontalLayoutNode *>(this)->childAtIndex(0)->isEmpty(); }
bool isCollapsable(int * numberOfOpenParenthesis, bool goingLeft) const override { return m_numberOfChildren != 0; }
bool isEmpty() const override { return numberOfChildren() == 1 && const_cast<HorizontalLayoutNode *>(this)->childAtIndex(0)->isEmpty(); }
bool isCollapsable(int * numberOfOpenParenthesis, bool goingLeft) const override { return numberOfChildren() != 0; }
// TreeNode
size_t size() const override { return sizeof(HorizontalLayoutNode); }
int numberOfChildren() const override { return m_numberOfChildren; }
void incrementNumberOfChildren(int increment = 1) override { m_numberOfChildren+= increment; }
void decrementNumberOfChildren(int decrement = 1) override {
assert(m_numberOfChildren >= decrement);
m_numberOfChildren-= decrement;
}
void eraseNumberOfChildren() override { m_numberOfChildren = 0; }
#if TREE_LOG
const char * description() const override {
return "Horizontal Layout";
@@ -58,7 +48,6 @@ private:
void didRemoveChildAtIndex(int index, LayoutCursor * cursor, bool force) override;
bool willReplaceChild(LayoutNode * oldChild, LayoutNode * newChild, LayoutCursor * cursor, bool force) override;
void render(KDContext * ctx, KDPoint p, KDColor expressionColor, KDColor backgroundColor) override {}
int m_numberOfChildren;
};
class HorizontalLayoutRef : public LayoutReference<HorizontalLayoutNode> {

View File

@@ -29,7 +29,6 @@ public:
// TreeNode
size_t size() const override { return sizeof(IntegralLayoutNode); }
int numberOfChildren() const override { return 3; }
#if TREE_LOG
const char * description() const override {
return "IntegralLayout";

View File

@@ -12,10 +12,7 @@ public:
constexpr static KDCoordinate k_leftRadixHeight = 8;
constexpr static KDCoordinate k_leftRadixWidth = 5;
NthRootLayoutNode() :
LayoutNode(),
m_numberOfChildren(0)
{}
using LayoutNode::LayoutNode;
// LayoutNode
void moveCursorLeft(LayoutCursor * cursor, bool * shouldRecomputeLayout) override;
@@ -28,16 +25,7 @@ public:
bool hasUpperLeftIndex() const override { return numberOfChildren() > 1; }
// TreeNode
void incrementNumberOfChildren(int increment = 1) override {
assert(increment == 1);
m_numberOfChildren+= increment;
}
void decrementNumberOfChildren(int decrement = 1) override {
assert(m_numberOfChildren >= decrement);
m_numberOfChildren-= decrement;
}
size_t size() const override { return sizeof(NthRootLayoutNode); }
int numberOfChildren() const override { return m_numberOfChildren; }
#if TREE_LOG
const char * description() const override {
return "NthRootLayout";
@@ -60,7 +48,6 @@ private:
void render(KDContext * ctx, KDPoint p, KDColor expressionColor, KDColor backgroundColor) override;
LayoutNode * radicandLayout() { return childAtIndex(0);}
LayoutNode * indexLayout() { return numberOfChildren() > 1 ? childAtIndex(1) : nullptr; }
int m_numberOfChildren;
};
class NthRootLayoutRef : public LayoutReference<NthRootLayoutNode> {

View File

@@ -28,7 +28,6 @@ public:
// TreeNode
size_t size() const override { return sizeof(SequenceLayoutNode); }
int numberOfChildren() const override { return 3; }
#if TREE_LOG
const char * description() const override {
return "Sequence Layout";

View File

@@ -56,10 +56,12 @@ public:
// Hierarchy
TreeNode * parentTree() const;
TreeNode * rootTree();
virtual int numberOfChildren() const = 0;
virtual void incrementNumberOfChildren(int increment = 1) {} // Do no put an assert(false), we need this method for instance in GridLayout::removeRow
virtual void decrementNumberOfChildren(int decrement = 1) {} // Do no put an assert(false), we need this method for instance in GridLayout::removeRow
virtual void eraseNumberOfChildren() {} //TODO Put an assert false //TODO what if somebody i stealing a unary tree's only child ?
int numberOfChildren() const { return m_numberOfChildren; }
void incrementNumberOfChildren(int increment = 1) { m_numberOfChildren += increment; }
void decrementNumberOfChildren(int decrement = 1) {
m_numberOfChildren = m_numberOfChildren > decrement ? m_numberOfChildren - decrement : 0;
}
virtual void eraseNumberOfChildren() { m_numberOfChildren = 0; }
int numberOfDescendants(bool includeSelf) const;
TreeNode * childTreeAtIndex(int i) const;
int indexOfChildByIdentifier(int childID) const;
@@ -176,6 +178,7 @@ protected:
private:
int m_identifier;
int m_referenceCounter;
int m_numberOfChildren;
};
}

View File

@@ -35,7 +35,6 @@ public:
// TreeNode
size_t size() const override { return sizeof(VerticalOffsetLayoutNode); }
int numberOfChildren() const override { return 1; }
#if TREE_LOG
const char * description() const override {
return m_type == Type::Subscript ? "Subscript" : "Superscript";

View File

@@ -217,7 +217,7 @@ KDPoint HorizontalLayoutNode::positionOfChild(LayoutNode * l) {
// Private
bool HorizontalLayoutNode::willAddChildAtIndex(LayoutNode * l, int * index, LayoutCursor * cursor) {
if (m_numberOfChildren > 0) {
if (numberOfChildren() > 0) {
*index = HorizontalLayoutRef(this).removeEmptyChildBeforeInsertionAtIndex(*index, !childAtIndex(0)->mustHaveLeftSibling(), cursor);
}