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