Graph : public Node<Node*><Var*>Canvas : public Graph<Var*>
%% https://github.com/JakeSteam/Mermaid
graph LR
Start((Start)):::start --> N0
classDef start fill:#ffd8a7, color:#000, stroke:#919191
N0 --> N1 --> | branch | N2
N1 --> N3
N2 --> | merge | N4
N3 --> N4 --> N5
N5 --> N6 --> N7 --> | loop | N5
N7 --> Subgraph
subgraph Subgraph[N8 - Subgraph]
S-Start((Start)):::start --> S-N1 --> S-N2
end
Subgraph --> N9 & N10
N10 --> N11 --> Parallel --> N13
subgraph Parallel[N12 - Parallel]
P-N1([P-N1]) -.- P-N2([P-N2])
end
NodeCondition*<Expression*>Var = Operate(TYPE, Var, ...)var = Operate(ASSIGN, var1)var = Operate(ADD, var1, var2)var = Operate(MULTIPLY, var1, var2, var3, ...)<Task*>OnStart()OnRunning()OnFinish()namespace utility {
enum class Type {
kEqual,
kLess, kGreater,
kLessOrEqual, kGreaterOrEqual,
kAnd, kOr,
};
} // namespace utility
class Condition
{
public:
virtual bool Triggered() = 0;
Type type_;
Var* left_var_, right_var_;
};
class ConditionEqual : public Condition {};
class ConditionLess : public Condition {};
class ConditionGreater : public Condition {};
class ConditionLessOrEqual : public Condition {};
class ConditionGreaterOrEqual : public Condition {};
class ConditionNested : public Condition
{
public:
// https://en.cppreference.com/w/cpp/language/abstract_class
virtual bool Triggered() override = 0;
protected:
std::vector<Condition*> conditions_;
};
class ConditionAnd : public ConditionNested {};
class ConditionOr : public ConditionNested {};