libgexf  0.1.3
dynamicgraph.h
Go to the documentation of this file.
1 
7 #ifndef _DYNAMICGRAPH_H
8 #define _DYNAMICGRAPH_H
9 
10 #include "graph.h"
11 #include <map>
12 #include <string>
13 
14 namespace libgexf {
15 
19  class DynamicGraph {
20  public:
21  DynamicGraph();
22  DynamicGraph(const DynamicGraph& orig);
23  virtual ~DynamicGraph();
24 
25  bool hasNodeStart(const libgexf::t_id node_id) const;
26  bool hasEdgeStart(const libgexf::t_id edge_id) const;
27 
28  bool hasNodeEnd(const libgexf::t_id node_id) const;
29  bool hasEdgeEnd(const libgexf::t_id edge_id) const;
30 
31  std::string getNodeStart(const libgexf::t_id node_id) const;
32  std::string getEdgeStart(const libgexf::t_id edge_id) const;
33 
34  std::string getNodeEnd(const libgexf::t_id node_id) const;
35  std::string getEdgeEnd(const libgexf::t_id edge_id) const;
36 
37  void setNodeStart(const libgexf::t_id node_id, const std::string& date);
38  void setEdgeStart(const libgexf::t_id edge_id, const std::string& date);
39 
40  void setNodeEnd(const libgexf::t_id node_id, const std::string& date);
41  void setEdgeEnd(const libgexf::t_id edge_id, const std::string& date);
42 
43 
44  // DynamicGraph is implemented in terms of a Graph
45 
46  unsigned int getDegree(const libgexf::t_id node_id, const std::string& date) const; //TODO impl getDegree
47  // libgexf::NodeIter* getNodes(const std::string& date) const;
48  // libgexf::NodeIter* getEdges(const std::string& date) const;
49  // std::vector<libgexf::t_id> getNeighbors(const libgexf::t_id node_id, const std::string& date) const;
50  // unsigned int getNodeCount(const std::string& date) const;
51  // unsigned int getEdgeCount(const std::string& date) const;
52 
53  void addNode(const libgexf::t_id id) { _graph.addNode(id); }
54  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)
55  {
56  _graph.addEdge(id, source_id, target_id, weight, type);
57  }
58 
59  void removeNode(const libgexf::t_id id);
60  void removeEdge(const libgexf::t_id source_id, const libgexf::t_id target_id);
61  bool containsNode(const libgexf::t_id id) const { return _graph.containsNode(id); }
62  bool containsEdge(const libgexf::t_id source_id, const libgexf::t_id target_id) const
63  {
64  return _graph.containsEdge(source_id, target_id);
65  }
66  t_id getEdge(const libgexf::t_id source_id, const libgexf::t_id target_id) const
67  {
68  return _graph.getEdge(source_id, target_id);
69  }
70  libgexf::NodeIter* getNodes() const { return _graph.getNodes(); }
71  libgexf::EdgeIter* getEdges() const { return _graph.getEdges(); }
72  std::vector<libgexf::t_id> getNeighbors(const libgexf::t_id node_id) const
73  {
74  return _graph.getNeighbors(node_id);
75  }
76 
80  unsigned int getNodeCount() const { return _graph.getNodeCount(); }
81 
85  unsigned int getEdgeCount() const { return _graph.getEdgeCount(); }
86 
87  void clearEdges(const libgexf::t_id node_id);
88  void clearEdges();
89 
90 
91  void clear();
92  private:
93  Graph _graph;
94  std::map<t_id,std::pair<std::string,std::string> > _nodes_dates;
95  std::map<t_id,std::pair<std::string,std::string> > _edges_dates;
96  };
97 
98 } /* namespace libgexf */
99 
100 #endif /* _DYNAMICGRAPH_H */
101 
std::string t_id
Definition: typedefs.h:35
t_id getEdge(const libgexf::t_id source_id, const libgexf::t_id target_id) const
Get the edge id.
Definition: graph.cpp:255
unsigned int getEdgeCount() const
Count the edges.
Definition: graph.cpp:280
Definition: abstractiter.h:32
unsigned int getNodeCount() const
Count the nodes.
Definition: graph.cpp:271
Definition: dynamicgraph.h:19
unsigned int getNodeCount() const
Definition: dynamicgraph.h:80
t_edge_type
Available edge types.
Definition: typedefs.h:50
Topology structure of the graph.
Definition: graph.h:49
void addNode(const libgexf::t_id id)
Add a node.
Definition: graph.cpp:57
bool containsEdge(const libgexf::t_id source_id, const libgexf::t_id target_id) const
Test edge existence.
Definition: graph.cpp:242
libgexf::EdgeIter * getEdges() const
Get all edges.
Definition: graph.cpp:227
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)
Add an edge.
Definition: graph.cpp:65
Iterator on edges.
Definition: edgeiter.h:45
libgexf::NodeIter * getNodes() const
Get all nodes.
Definition: graph.cpp:221
unsigned int getEdgeCount() const
Definition: dynamicgraph.h:85
Iterator on nodes.
Definition: nodeiter.h:45
bool containsNode(const libgexf::t_id id) const
Test node existence.
Definition: graph.cpp:233
std::vector< libgexf::t_id > getNeighbors(const libgexf::t_id node_id) const
Get node neighbors.
Definition: graph.cpp:328