ELVE  1
ELVE Logic Visualization Explorer
/home/travis/build/stdgregwar/elve/Core/GraphData.h
00001 #ifndef GRAPHDATA_H
00002 #define GRAPHDATA_H
00003 
00004 #include "NodeData.h"
00005 
00006 namespace Elve {
00007 
00008 class GraphData;
00009 typedef std::shared_ptr<GraphData> SharedData;
00010 
00011 class Graph;
00012 class GraphData
00013 {
00014     friend class Graph;
00015 public:
00032     class Builder{
00033     public:
00037         Builder();
00038 
00044         void setDependencies(const NodeName& name, const NodeNames& dependencies);
00045 
00051         void setDependencies(const NodeName &name, const Dependencies &dependencies);
00052 
00058         void setId(const NodeName& name, const NodeID& id);
00059         void addDependency(const NodeID& from, const NodeID& to);
00060         void setProperties(const NodeName& name, const NodeProperties& props);
00061 
00068         void addProperty(const NodeName& name, const QString& pname, const QJsonValue& val);
00069 
00075         void setNodeInputNames(const NodeName& name, const Names& names);
00076 
00082         void setNodeOutputNames(const NodeName& name, const Names& names);
00083 
00089         void setNode(const NodeName& name, const Node& node);
00090 
00096         QJsonObject& properties(const NodeName& name);
00097 
00103         void setType(const NodeName& name, const NodeType& type);
00104 
00113         void setIoIndex(const NodeName& name, const Index& index);
00114 
00123         const SharedData build(const QString &filename);
00124 
00131         NodeID id(const NodeName& name);
00132 
00138         NodeType type(const NodeID& id);
00139 
00145         NodeProperties props(const NodeID& id);
00146         Index index(const NodeID& id);
00147         Dependencies dependencies(const NodeID& id);
00148         Names nodeInputNames(const NodeID& id);
00149         Names nodeOutputNames(const NodeID& id);
00150         int nodeInputCount(const NodeID& id);
00151         int nodeOutputCount(const NodeID& id);
00152 
00153         const NodeIDs& outputs() const;
00154         const NodeIDs& inputs() const;
00155         NodeName name(const NodeID& id) const;
00156     private:
00157 
00158         NodeID mID;
00159         std::unordered_map<NodeID,Dependencies> mDependencies;
00160         std::unordered_map<NodeID,NodeProperties> mProperties;
00161         std::unordered_map<NodeID,Names> mNodeInputsNames;
00162         std::unordered_map<NodeID,Names> mNodeOutputsNames;
00163         std::unordered_map<NodeID,int> mNodeInputCount;
00164         std::unordered_map<NodeID,int> mNodeOutputCount;
00165         std::unordered_map<NodeID,Index> mIndice;
00166         std::unordered_map<NodeID,NodeType> mTypes;
00167         std::unordered_map<NodeName,NodeID> mIDs;
00168         std::unordered_map<NodeID,NodeName> mNames;
00169         NodeIDs mOutputs;
00170         NodeIDs mInputs;
00171     };
00172 
00173     GraphData(const NodeDatas& nodesData = {}, QString filename = "graph");
00174     GraphData(const QJsonObject& obj);
00175     const NodeDatas& nodeDatas() const;
00176     const QString& filename() const;
00177     QJsonObject json() const;
00178 private:
00179     QString mFilename;
00180     NodeDatas mDatas;
00181 };
00182 
00183 }
00184 
00185 #endif // GRAPHDATA_H
 All Classes Functions