1 #ifndef __DIADES__GRAPH__GRAPHDATA__HH 2 #define __DIADES__GRAPH__GRAPHDATA__HH 23 template<
typename Any>
27 return "Graph::GraphIterator";
40 typedef typename vector<value_type>::size_type
SizeType;
56 explicit GraphIterator(vector<value_type> * pVect, SizeType index) : _pVect(pVect), _index(index) {
57 if (_index < _pVect->size()) {
58 if (!(*_pVect)[_index].
valid()) {
62 _index = _pVect->size();
64 ensure(Exception, (_index == _pVect->size()) || (_index < _pVect->size() && (*_pVect)[
_index].valid()),
73 assertion(Exception, (_index < _pVect->size() && (*_pVect)[_index].
valid()),
"operator*()");
82 assertion(Exception, (_index < _pVect->size() && (*_pVect)[_index].
valid()),
"operator*()");
92 while ((_index < _pVect->size())
93 && !((*_pVect)[_index].
valid())) {
96 ensure(Exception, (_index == _pVect->size()) || (_index < _pVect->size() && (*_pVect)[
_index].valid()),
108 while ((_index < _pVect->size()) && !((*_pVect)[_index].
valid())) {
111 ensure(Exception, (_index == _pVect->size()) || (_index < _pVect->size() && (*_pVect)[
_index].valid()),
122 return (_pVect == it._pVect) && (_index == it._index);
131 return !(*
this == it);
179 return "Graph::Graph";
242 unsigned id()
const {
491 virtual void deleteEdge(EdgeIterator start, EdgeIterator end);
661 return _vEdges.size();
670 return _vNodes.size();
679 ostream &
toDot(ostream & os);
700 template<
typename InputIterator>
702 for (; first != last; ++first) {
703 g.deleteEdge(*first);
713 template<
typename InputIterator>
715 for (; first != last; ++first) {
716 g.deleteNode(*first);
728 template<
typename InputIterator,
typename Predicate>
729 inline void deleteNode(
Graph & g, InputIterator first, InputIterator last, Predicate pred) {
730 for (; first != last; ++first) {
731 if (pred()(*first)) {
732 g.deleteNode(*first);
OutEdgeIterator outEdgeBegin(const Node &node) const
list< NodeSizeType > & listNodeId()
NodeSizeType nodeCapacity() const
list< EdgeSizeType > & listEdgeId()
GraphIterator< Edge > EdgeIterator
Edge newEdge(Node source, Node target)
Diades::Utils::Exception< Graph > Exception
EdgeSizeType numberOfEdges() const
void copyGraph(const Graph &graph)
vector< Edge >::size_type EdgeSizeType
Diades::Utils::Exception< GraphIterator > Exception
#define ensure(Exception, expr, message)
list< NodeSizeType > _listNodeId
const Node & targetRef(const Edge &edge) const
vector< value_type >::size_type SizeType
bool operator!=(const self &it) const
vector< value_type > * _pVect
EdgeIterator edgeBegin() const
GraphIterator< Node > NodeIterator
Node source(const Edge &edge) const
ptrdiff_t difference_type
NodeIterator nodeEnd() const
ostream & toDot(ostream &os)
Namespace of the Diades project.
Edge getEdge(EdgeSizeType index) const
list< Edge >::iterator LocalEdgeIterator
reference operator*() const
Graph & operator=(const Graph &graph)
InEdgeIterator inEdgeBegin(const Node &node) const
bool sanityCheck(string &log) const
bool succeeds(const Node &n1, const Node &n2) const
list< Edge >::iterator OutEdgeIterator
virtual void deleteNode(Node &node)
Node getNode(NodeSizeType index) const
boost::adjacency_list Graph
const vector< Edge > & vEdges() const
virtual void deleteEdge(Edge &edge)
OutEdgeIterator outEdgeEnd(const Node &node) const
void transitiveClosure(Edge edge)
pointer operator->() const
vector< Node >::size_type NodeSizeType
std::forward_iterator_tag iterator_category
GraphIterator(vector< value_type > *pVect, SizeType index)
vector< Node > & vNodes()
const list< EdgeSizeType > & listEdgeId() const
Log log(Logger logger, const string &msg)
bool cycleDetection(const Node &n) const
list< Edge >::iterator InEdgeIterator
list< EdgeSizeType > _listEdgeId
const list< NodeSizeType > & listNodeId() const
Node target(const Edge &edge) const
EdgeIterator edgeEnd() const
virtual void deleteAllEdges()
NodeIterator nodeBegin() const
NodeSizeType numberOfNodes() const
vector< Edge > & vEdges()
const vector< Node > & vNodes() const
bool operator==(const self &it) const
#define assertion(Exception, expr, message)
InEdgeIterator inEdgeEnd(const Node &node) const
EdgeSizeType edgeCapacity() const
const Node & sourceRef(const Edge &edge) const