mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-18 16:27:34 +01:00
[escher/toolbox_message_tree] Add indirection
The children of a ToolboxMessageTree object can be stored as a simple pointer, representing an array of all the children stored consecutively, or as a double pointer, representing an array storing the addresses of all children. Change-Id: I10134684963aaafc635aaf9a2374d0f3c32d3d0c
This commit is contained in:
committed by
Émilie Feral
parent
f777cad3f7
commit
6105f44a46
@@ -10,7 +10,7 @@ public:
|
||||
label,
|
||||
text,
|
||||
(insertedText == (I18n::Message)0) ? label : insertedText,
|
||||
nullptr,
|
||||
static_cast<ToolboxMessageTree *>(0),
|
||||
0,
|
||||
stripInsertedText);
|
||||
};
|
||||
@@ -24,7 +24,19 @@ public:
|
||||
N,
|
||||
true);
|
||||
}
|
||||
const MessageTree * childAtIndex(int index) const override { return &m_children[index]; }
|
||||
template <int N>
|
||||
constexpr static ToolboxMessageTree Node(I18n::Message label, const ToolboxMessageTree * (&children)[N]) {
|
||||
return ToolboxMessageTree(
|
||||
label,
|
||||
(I18n::Message)0,
|
||||
(I18n::Message)0,
|
||||
children,
|
||||
N,
|
||||
true);
|
||||
}
|
||||
const MessageTree * childAtIndex(int index) const override {
|
||||
return m_childrenConsecutive ? m_children.m_direct + index : m_children.m_indirect[index];
|
||||
}
|
||||
I18n::Message text() const { return m_text; }
|
||||
I18n::Message insertedText() const { return m_insertedText; }
|
||||
bool stripInsertedText() const { return m_stripInsertedText; }
|
||||
@@ -34,12 +46,30 @@ private:
|
||||
m_children(children),
|
||||
m_text(text),
|
||||
m_insertedText(insertedText),
|
||||
m_stripInsertedText(stripInsertedText)
|
||||
m_stripInsertedText(stripInsertedText),
|
||||
m_childrenConsecutive(true)
|
||||
{}
|
||||
const ToolboxMessageTree * m_children;
|
||||
constexpr ToolboxMessageTree(I18n::Message label, I18n::Message text, I18n::Message insertedText, const ToolboxMessageTree ** children, int numberOfChildren, bool stripInsertedText) :
|
||||
MessageTree(label, numberOfChildren),
|
||||
m_children(children),
|
||||
m_text(text),
|
||||
m_insertedText(insertedText),
|
||||
m_stripInsertedText(stripInsertedText),
|
||||
m_childrenConsecutive(false)
|
||||
{}
|
||||
|
||||
union Children {
|
||||
public:
|
||||
constexpr Children(const ToolboxMessageTree * children) : m_direct(children) {}
|
||||
constexpr Children(const ToolboxMessageTree ** children) : m_indirect(children) {}
|
||||
const ToolboxMessageTree * m_direct;
|
||||
const ToolboxMessageTree ** m_indirect;
|
||||
};
|
||||
const Children m_children;
|
||||
I18n::Message m_text;
|
||||
I18n::Message m_insertedText;
|
||||
bool m_stripInsertedText;
|
||||
const bool m_childrenConsecutive;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user