DiaDes  0.1
DIAgnosis of Discrete-Event System
NodeData.hh
Go to the documentation of this file.
1 #ifndef __DIADES__GRAPH__NODEDATA__HH
2 #define __DIADES__GRAPH__NODEDATA__HH
3 
4 
5 #include <list>
10 
11 
12 namespace Diades {
13  namespace Graph {
14  class Graph;
15 
25  class NodeData {
26  public:
27 
28  static string typeName() {
29  return "Graph::NodeData";
30  }
32 
33  public:
34  typedef vector<NodeData *>::size_type SizeType;
35  typedef vector<Node>::size_type NodeId;
36  public:
37 
41  NodeData() : _owner(nullptr),
42  _identifier(0),
43  _inEdges(),
44  _outEdges(),
45  _inEdgesNb(0),
46  _outEdgesNb(0) {}
47 
52 
57  bool isValid() const {
58  return (_owner != nullptr);
59  }
60 
61 
67  list<Edge>::iterator delInEdge(EdgeData * eData) {
68  require(Exception, eData != nullptr, "NodeData::delInEdge: eData is null");
69  list<Edge>::iterator result;
70  if (eData != 0) {
71  result = _inEdges.erase(eData->_targetPos);
72  _inEdgesNb--;
73  };
74  return result;
75  }
76 
82  list<Edge>::iterator delOutEdge(EdgeData * eData) {
83  require(Exception, eData != nullptr, "NodeData::delOutEdge: eData is null");
84  list<Edge>::iterator result;
85  if (eData != nullptr) {
86  result = _outEdges.erase(eData->_sourcePos);
87  _outEdgesNb--;
88  }
89  return result;
90  }
91 
97  list<Edge>::iterator newInEdge(EdgeData * eData);
98 
104  list<Edge>::iterator newOutEdge(EdgeData * eData);
105 
106 
111  const Graph & owner() const;
112 
117  void setOwner(Graph & newOwner);
118 
123  SizeType outEdgesNb() const {
124  return _outEdgesNb;
125  }
126 
131  SizeType inEdgesNb() const {
132  return _inEdgesNb;
133  }
134 
139  list<Edge> & inEdges() const {
140  return _inEdges;
141  }
142 
147  list<Edge> & outEdges() const {
148  return _outEdges;
149  }
150 
155  NodeId identifier() const {
156  return _identifier;
157  }
158 
163  void setIdentifier(NodeId newId) {
164  _identifier = newId;
165  }
166  private:
168  NodeId _identifier;
169  mutable list<Edge> _inEdges;
170  mutable list<Edge> _outEdges;
171  SizeType _inEdgesNb;
172  SizeType _outEdgesNb;
173 
174  friend class Edge;
175  };
176  };
177 };
178 
179 #endif
SizeType _inEdgesNb
list of the output edges
Definition: NodeData.hh:171
SizeType outEdgesNb() const
Definition: NodeData.hh:123
Diades::Utils::Exception< NodeData > Exception
Definition: NodeData.hh:31
list< Edge > _inEdges
the identifier of the Node
Definition: NodeData.hh:169
list< Edge >::iterator delInEdge(EdgeData *eData)
Definition: NodeData.hh:67
const Graph & owner() const
Definition: NodeImpl.hh:31
NodeId identifier() const
Definition: NodeData.hh:155
SizeType _outEdgesNb
number of input edges (list.size not constant??)
Definition: NodeData.hh:172
list< Edge > & outEdges() const
Definition: NodeData.hh:147
list< Edge > & inEdges() const
Definition: NodeData.hh:139
list< Edge >::iterator delOutEdge(EdgeData *eData)
Definition: NodeData.hh:82
void setOwner(Graph &newOwner)
Definition: NodeImpl.hh:39
void setIdentifier(NodeId newId)
Definition: NodeData.hh:163
list< Edge >::iterator _sourcePos
pointer to the NodeData source of the Edge
Definition: EdgeData.hh:110
#define require(Exception, expr, message)
Definition: Assertion.hh:90
Namespace of the Diades project.
list< Edge >::iterator newOutEdge(EdgeData *eData)
Definition: Edge.hh:306
vector< NodeData * >::size_type SizeType
Definition: NodeData.hh:34
boost::adjacency_list Graph
Definition: ScaleFree.cc:9
list< Edge >::iterator newInEdge(EdgeData *eData)
Definition: Edge.hh:294
bool isValid() const
Definition: NodeData.hh:57
SizeType inEdgesNb() const
Definition: NodeData.hh:131
static string typeName()
Definition: NodeData.hh:28
list< Edge >::iterator _targetPos
position of the Edge in the list of Edge associated with the source Node
Definition: EdgeData.hh:112
list< Edge > _outEdges
list of the input edges
Definition: NodeData.hh:170
NodeId _identifier
the graph that owns the NodeData (if valid)
Definition: NodeData.hh:168
vector< Node >::size_type NodeId
Definition: NodeData.hh:35