Maki
Formally verfied low-code orchestration
Loading...
Searching...
No Matches
data_flow_model.h
1#pragma once
2
3#include <QString>
4#include <QVariant>
5#include <optional>
6#include <unordered_map>
7#include <vector>
8
9#include "typing/type_reference.h"
10
11namespace maki
12{
13
14using NodeId = QString;
15using DataId = QString;
16
24{
25 NodeId nodeId;
26
27 QString eventName;
28 QString argumentName;
29
30 bool operator==(const DataPort& other) const
31 {
32 return nodeId == other.nodeId && eventName == other.eventName && argumentName == other.argumentName;
33 }
34};
35
40{
41 Capability,
42 MissionParameter
43};
44
53{
54 QVariant value;
55 bool hasValue = false;
56};
57
72{
73 DataId id;
74 QString name;
75 koda::types::TypeReference type;
76 DataSourceKind sourceKind = DataSourceKind::Capability;
77
78 std::optional<DataPort> producer;
79 std::vector<DataPort> consumers;
80 std::optional<MissionValue> missionValue;
81};
82
83class DataFlowModel
84{
85public:
86 DataFlowModel() = default;
87
88 static DataFlowModel& instance();
89 void clear();
90
91 DataId createEntry(const QString& name, const koda::types::TypeReference& type);
92 DataId createMissionParameter(const QString& name, const koda::types::TypeReference& type);
93 bool removeEntry(const DataId& id);
94
95 DataEntry* get(const DataId& id);
96 const DataEntry* get(const DataId& id) const;
97 const std::unordered_map<DataId, DataEntry>& entries() const;
98
99 bool setProducer(const DataId& id, const DataPort& producer);
100 bool addConsumer(const DataId& id, const DataPort& consumer);
101 bool removeProducer(const DataId& id);
102 bool removeConsumer(const DataId& id, const DataPort& consumer);
103 void removeNode(const NodeId& nodeId);
104
105 std::optional<DataId> entryProducedBy(const DataPort& producer) const;
106 std::optional<DataId> entryConsumedBy(const DataPort& consumer) const;
107 std::vector<DataId> entriesProducedBy(const NodeId& nodeId) const;
108 std::vector<DataId> entriesConsumedBy(const NodeId& nodeId) const;
109
110 bool setMissionValue(const DataId& id, const QVariant& value);
111 bool clearMissionValue(const DataId& id);
112 std::vector<DataId> missionParameters() const;
113
114 bool hasProducer(const DataPort& port) const;
115 bool hasConsumer(const DataPort& port) const;
116 bool isUnused(const DataId& id) const;
117
118private:
119 DataId generateId() const;
120
121private:
122 std::unordered_map<DataId, DataEntry> mEntries;
123};
124
125} // namespace maki
Contains UI helper widgets and layout grouping utilities used by MAKI.
Definition generator.h:10
DataSourceKind
Definition data_flow_model.h:40
Definition data_flow_model.h:72
Definition data_flow_model.h:24
Definition data_flow_model.h:53