2#include <State/Relation.hpp>
4#include <score/model/tree/InvisibleRootNode.hpp>
5#include <score/model/tree/TreeNode.hpp>
6#include <score/model/tree/TreeNodeSerialization.hpp>
7#include <score/model/tree/VariantBasedNode.hpp>
8#include <score/tools/std/Optional.hpp>
10#include <ossia/editor/expression/operators.hpp>
19template <
typename DataType>
26using BinaryOperator = ossia::expressions::binary_operator;
28enum class UnaryOperator
44 : VariantBasedNode{std::move(data)}
49 : VariantBasedNode{std::move(data)}
54 : VariantBasedNode{std::move(data)}
59 : VariantBasedNode{std::move(data)}
64 : VariantBasedNode{std::move(data)}
70 return lhs.m_data == rhs.m_data;
73 QString toString()
const;
92 SCORE_LIB_STATE_EXPORT
96 SCORE_LIB_STATE_EXPORT
101 QString toString()
const;
102 QString toPrettyString()
const;
104 using iterator =
typename std::list<TreeNode>::iterator;
105 using const_iterator =
typename std::list<TreeNode>::const_iterator;
108 const_iterator begin()
const;
109 const_iterator cbegin()
const;
113 const_iterator end()
const;
114 const_iterator cend()
const;
133 void push_back(
const TreeNode& child);
137 template <
typename... Args>
138 auto& emplace_back(Args&&... args)
140 m_children.emplace_back(std::forward<Args>(args)...);
142 auto& cld = m_children.back();
147 template <
typename... Args>
148 auto& emplace(Args&&... args)
150 auto& n = *m_children.emplace(std::forward<Args>(args)...);
156 bool hasChild(std::size_t index)
const;
158 const TreeNode& childAt(
int index)
const;
161 int indexOfChild(
const TreeNode* child)
const;
162 int childCount()
const;
163 bool hasChildren()
const;
165 std::list<TreeNode>& children();
166 const std::list<TreeNode>& children()
const;
169 void removeChild(const_iterator it);
174 std::list<TreeNode> m_children;
177SCORE_LIB_STATE_EXPORT
184SCORE_LIB_STATE_EXPORT std::optional<State::Expression>
185parseExpression(
const QString& str);
186SCORE_LIB_STATE_EXPORT std::optional<State::Expression>
187parseExpression(
const std::string& str);
193SCORE_LIB_STATE_EXPORT
bool isEmptyExpression(
const QString&);
195SCORE_LIB_STATE_EXPORT
197SCORE_LIB_STATE_EXPORT
202SCORE_LIB_STATE_EXPORT std::vector<std::shared_ptr<const Anchor>>
205SCORE_LIB_STATE_EXPORT
void
206setAnchors(Expression& e,
const std::vector<std::shared_ptr<const Anchor>>& a);
208SCORE_LIB_STATE_EXPORT
bool identical(
const Expression& a,
const Expression& b);
211SCORE_LIB_STATE_EXPORT
void
213SCORE_LIB_STATE_EXPORT
void loadAnchors(
JSONWriter& w,
const char* key, Expression& e);
218JSON_METADATA(
State::AddressAccessor, "AddressAccessor")
219JSON_METADATA(
State::Relation, "Relation")
220JSON_METADATA(
State::Pulse, "Pulse")
221JSON_METADATA(
State::UnaryOperator, "UnOp")
222JSON_METADATA(
State::BinaryOperator, "BinOp")
224SCORE_SERIALIZE_DATASTREAM_DECLARE(SCORE_LIB_STATE_EXPORT,
State::Expression)
225Q_DECLARE_METATYPE(
State::Expression)
226W_REGISTER_ARGTYPE(
State::Expression)
Definition VisitorInterface.hpp:53
Definition VisitorInterface.hpp:61
Definition JSONVisitor.hpp:52
Definition JSONVisitor.hpp:423
Definition TreeNode.hpp:52
The VariantBasedNode class.
Definition VariantBasedNode.hpp:23
Utilities for OSSIA data structures.
Definition DeviceInterface.hpp:35
SCORE_LIB_STATE_EXPORT bool isTrueExpression(const QString &)
True if the expression is "true" (the default case)
Definition Expression.cpp:288
void saveAnchors(JSONReader &r, const char *key, const Expression &e)
An expression is serialized as a string, which loses its anchors.
Definition AddressSerialization.cpp:271
std::vector< std::shared_ptr< const Anchor > > anchors(const Expression &e)
Anchors of the addresses in order of appearance, null where there is none.
Definition Expression.cpp:526
void setAnchors(Expression &e, const std::vector< std::shared_ptr< const Anchor > > &a)
Inverse of anchors(); extra entries are ignored.
Definition Expression.cpp:534
bool identical(const Expression &a, const Expression &b)
Equal, with the same anchors.
Definition Expression.cpp:544
The Address struct.
Definition Address.hpp:81
Definition Expression.hpp:35
Definition Relation.hpp:71
Definition Relation.hpp:19