00001
00007 #ifndef _DYNAMICGRAPH_H
00008 #define _DYNAMICGRAPH_H
00009
00010 #include "graph.h"
00011 #include <map>
00012 #include <string>
00013
00014 namespace libgexf {
00015
00019 class DynamicGraph {
00020 public:
00021 DynamicGraph();
00022 DynamicGraph(const DynamicGraph& orig);
00023 virtual ~DynamicGraph();
00024
00025 bool hasNodeStart(const libgexf::t_id node_id) const;
00026 bool hasEdgeStart(const libgexf::t_id edge_id) const;
00027
00028 bool hasNodeEnd(const libgexf::t_id node_id) const;
00029 bool hasEdgeEnd(const libgexf::t_id edge_id) const;
00030
00031 std::string getNodeStart(const libgexf::t_id node_id) const;
00032 std::string getEdgeStart(const libgexf::t_id edge_id) const;
00033
00034 std::string getNodeEnd(const libgexf::t_id node_id) const;
00035 std::string getEdgeEnd(const libgexf::t_id edge_id) const;
00036
00037 void setNodeStart(const libgexf::t_id node_id, const std::string& date);
00038 void setEdgeStart(const libgexf::t_id edge_id, const std::string& date);
00039
00040 void setNodeEnd(const libgexf::t_id node_id, const std::string& date);
00041 void setEdgeEnd(const libgexf::t_id edge_id, const std::string& date);
00042
00043
00044
00045
00046 unsigned int getDegree(const libgexf::t_id node_id, const std::string& date) const;
00047
00048
00049
00050
00051
00052
00053 void addNode(const libgexf::t_id id) { _graph.addNode(id); }
00054 void addEdge(const libgexf::t_id id, const libgexf::t_id source_id, const libgexf::t_id target_id, const float weight=1.0, const libgexf::t_edge_type type=EDGE_UNDEF)
00055 {
00056 _graph.addEdge(id, source_id, target_id, weight, type);
00057 }
00058
00059 void removeNode(const libgexf::t_id id);
00060 void removeEdge(const libgexf::t_id source_id, const libgexf::t_id target_id);
00061 bool containsNode(const libgexf::t_id id) const { return _graph.containsNode(id); }
00062 bool containsEdge(const libgexf::t_id source_id, const libgexf::t_id target_id) const
00063 {
00064 return _graph.containsEdge(source_id, target_id);
00065 }
00066 t_id getEdge(const libgexf::t_id source_id, const libgexf::t_id target_id) const
00067 {
00068 return _graph.getEdge(source_id, target_id);
00069 }
00070 libgexf::NodeIter* getNodes() const { return _graph.getNodes(); }
00071 libgexf::EdgeIter* getEdges() const { return _graph.getEdges(); }
00072 std::vector<libgexf::t_id> getNeighbors(const libgexf::t_id node_id) const
00073 {
00074 return _graph.getNeighbors(node_id);
00075 }
00076
00080 unsigned int getNodeCount() const { return _graph.getNodeCount(); }
00081
00085 unsigned int getEdgeCount() const { return _graph.getEdgeCount(); }
00086
00087 void clearEdges(const libgexf::t_id node_id);
00088 void clearEdges();
00089
00090
00091 void clear();
00092 private:
00093 Graph _graph;
00094 std::map<t_id,std::pair<std::string,std::string> > _nodes_dates;
00095 std::map<t_id,std::pair<std::string,std::string> > _edges_dates;
00096 };
00097
00098 }
00099
00100 #endif
00101