ELVE  1
ELVE Logic Visualization Explorer
/home/travis/build/stdgregwar/elve/Core/NodeData.h
00001 #ifndef NODEDATA_H
00002 #define NODEDATA_H
00003 
00004 #include <string>
00005 #include <unordered_set>
00006 #include <vector>
00007 #include <unordered_map>
00008 #include <memory>
00009 #include <QJsonObject>
00010 #include <QJsonArray>
00011 
00012 namespace Elve {
00013 
00021 typedef unsigned NodeID;
00022 typedef std::string Name;
00023 typedef std::vector<std::string> Names;
00024 
00028 typedef Name NodeName;
00029 
00033 typedef int Index;
00034 
00038 typedef std::vector<NodeID> NodeIDs;
00039 
00043 typedef Names NodeNames;
00044 
00048 typedef std::unordered_set<NodeID> NodeIDSet;
00049 
00053 typedef QJsonObject NodeProperties;
00054 
00063 struct Dependency {
00064     Dependency(const NodeID& id);
00065     Dependency(const NodeID &id,Index from, Index to);
00066     Dependency(const QJsonArray& v);
00067     QJsonValue json() const;
00068     NodeID id;
00069     Index from;
00070     Index to;
00071 };
00072 
00076 typedef std::vector<Dependency> Dependencies;
00077 
00081 enum NodeType{
00082     NODE,
00083     INPUT,
00084     OUTPUT,
00085     CLUSTER,
00086     INPUT_CLUSTER,
00087     OUTPUT_CLUSTER,
00088     LAST
00089 };
00090 
00091 class Node;
00092 class NodeData
00093 {
00094     friend class Node;
00095 public:
00096     NodeData(const NodeID& id = -1, const NodeName& name = "unnamed",const Dependencies& dependencies = {},
00097              const NodeType& type = NODE, const NodeProperties& props = {}, const Index& ioindex = 0,
00098              int inputCount = 2, int outputCount = 1, const Names& inputNames = {}, const Names& outputNames = {});
00099 
00100     NodeData(const QJsonObject& obj);
00101     const NodeProperties& properties() const;
00102     NodeProperties& properties();
00103     const NodeID& id() const;
00104     const Dependencies &dependencies() const;
00105     const NodeType& type() const;
00106     const Index& ioIndex() const;
00107     const QJsonObject json() const;
00108     const NodeName& name() const;
00109     int inputCount() const;
00110     int outputCount() const;
00111     Name inputName(const Index& i) const;
00112     Name outputName(const Index& i) const;
00113     NodeData asInput(const NodeID& newId, const Index &io) const ;
00114     NodeData asOutput(const NodeID& newID, const Index& io) const;
00115 private:
00116     NodeProperties mProperties;
00117     NodeID mId;
00118     NodeName mName;
00119     Names mInputNames;
00120     Names mOutputNames;
00121     size_t mInputCount;
00122     size_t mOutputCount;
00123     Dependencies mDependencies;
00124     NodeType mType;
00125     Index mIOIndex;
00126 };
00127 
00128 typedef std::vector<NodeData> NodeDatas;
00129 typedef std::unordered_map<NodeID,NodeData> SparseData;
00130 
00131 }
00132 
00133 #endif // NODEDATA_H
 All Classes Functions