21 #ifndef TULIP_GGRAPHITERATOR_H 22 #define TULIP_GGRAPHITERATOR_H 23 #include <tulip/Iterator.h> 24 #include <tulip/memorypool.h> 27 #include <tulip/MutableContainer.h> 28 #include <tulip/Observable.h> 29 #include <tulip/tulipconf.h> 30 #include <tulip/StoredType.h> 41 class TLP_SCOPE NodeIterator :
public Iterator<node> {};
43 class TLP_SCOPE EdgeIterator :
public Iterator<edge> {};
45 #if !defined(NDEBUG) && !defined(_OPENMP) 46 class TLP_SCOPE NodeIteratorObserver :
public NodeIterator,
public Observable {
49 void treatEvent(
const Event &);
52 class TLP_SCOPE EdgeIteratorObserver :
public EdgeIterator,
public Observable {
55 void treatEvent(
const Event &);
60 class TLP_SCOPE FactorNodeIterator
61 #if defined(NDEBUG) || defined(_OPENMP)
64 :
public NodeIteratorObserver
71 FactorNodeIterator(
const Graph *sG) : _parentGraph(sG->getSuperGraph()) {}
74 class TLP_SCOPE FactorEdgeIterator
75 #if defined(NDEBUG) || defined(_OPENMP)
78 :
public EdgeIteratorObserver
85 FactorEdgeIterator(
const Graph *sG) : _parentGraph(sG->getSuperGraph()) {}
89 template <
typename VALUE_TYPE>
90 class SGraphNodeIterator :
public FactorNodeIterator,
91 public MemoryPool<SGraphNodeIterator<VALUE_TYPE>> {
97 const MutableContainer<VALUE_TYPE> &_filter;
101 while (it->hasNext()) {
102 curNode = it->next();
104 if (_filter.get(curNode) == value)
113 SGraphNodeIterator(
const Graph *sG,
const MutableContainer<VALUE_TYPE> &filter,
114 typename tlp::StoredType<VALUE_TYPE>::ReturnedConstValue val)
115 : FactorNodeIterator(sG), sg(sG), value(val), _filter(filter) {
117 #if !defined(NDEBUG) && !defined(_OPENMP) 118 sg->addListener(
this);
123 ~SGraphNodeIterator()
override {
124 #if !defined(NDEBUG) && !defined(_OPENMP) 125 sg->removeListener(
this);
129 node next()
override {
130 assert(curNode.isValid());
138 bool hasNext()
override {
139 return (curNode.isValid());
145 class TLP_SCOPE OutNodesIterator :
public FactorNodeIterator,
public MemoryPool<OutNodesIterator> {
148 #if !defined(NDEBUG) && !defined(_OPENMP) 152 OutNodesIterator(
const GraphView *sG, node n);
153 ~OutNodesIterator()
override;
154 node next()
override;
155 bool hasNext()
override;
159 class InNodesIterator :
public FactorNodeIterator,
public MemoryPool<InNodesIterator> {
162 #if !defined(NDEBUG) && !defined(_OPENMP) 166 InNodesIterator(
const GraphView *sG, node n);
167 ~InNodesIterator()
override;
168 node next()
override;
169 bool hasNext()
override;
173 class TLP_SCOPE InOutNodesIterator :
public FactorNodeIterator,
174 public MemoryPool<InOutNodesIterator> {
178 #if !defined(NDEBUG) && !defined(_OPENMP) 182 InOutNodesIterator(
const GraphView *sG, node n);
183 ~InOutNodesIterator()
override;
184 node next()
override;
185 bool hasNext()
override;
189 template <
typename VALUE_TYPE>
190 class SGraphEdgeIterator :
public FactorEdgeIterator,
191 public MemoryPool<SGraphEdgeIterator<VALUE_TYPE>> {
197 const MutableContainer<VALUE_TYPE> &_filter;
201 while (it->hasNext()) {
202 curEdge = it->next();
204 if (_filter.get(curEdge.id) == value)
213 SGraphEdgeIterator(
const Graph *sG,
const MutableContainer<VALUE_TYPE> &filter,
214 typename tlp::StoredType<VALUE_TYPE>::ReturnedConstValue val)
215 : FactorEdgeIterator(sG), sg(sG), value(val), _filter(filter) {
217 #if !defined(NDEBUG) && !defined(_OPENMP) 218 sg->addListener(
this);
224 ~SGraphEdgeIterator()
override {
225 #if !defined(NDEBUG) && !defined(_OPENMP) 226 sg->removeListener(
this);
231 edge next()
override {
232 assert(curEdge.isValid());
240 bool hasNext()
override {
241 return (curEdge.isValid());
246 class TLP_SCOPE OutEdgesIterator :
public FactorEdgeIterator,
public MemoryPool<OutEdgesIterator> {
253 OutEdgesIterator(
const GraphView *sG, node n);
254 ~OutEdgesIterator()
override;
255 edge next()
override;
256 bool hasNext()
override;
263 class TLP_SCOPE InEdgesIterator :
public FactorEdgeIterator,
public MemoryPool<InEdgesIterator> {
270 InEdgesIterator(
const GraphView *sG, node n);
271 ~InEdgesIterator()
override;
272 edge next()
override;
273 bool hasNext()
override;
280 class TLP_SCOPE InOutEdgesIterator :
public FactorEdgeIterator,
281 public MemoryPool<InOutEdgesIterator> {
288 InOutEdgesIterator(
const GraphView *sG, node n);
289 ~InOutEdgesIterator()
override;
290 edge next()
override;
291 bool hasNext()
override;
300 class TLP_SCOPE GraphNodeIterator
301 #if defined(NDEBUG) || defined(_OPENMP)
302 :
public NodeIterator,
303 public MemoryPool<GraphNodeIterator>
305 :
public NodeIteratorObserver
309 #if !defined(NDEBUG) && !defined(_OPENMP) 312 Iterator<node> *itId;
315 GraphNodeIterator(
const Graph *g, Iterator<node> *it);
316 ~GraphNodeIterator()
override;
317 node next()
override;
318 bool hasNext()
override;
322 class TLP_SCOPE GraphEdgeIterator
323 #if defined(NDEBUG) || defined(_OPENMP)
324 :
public EdgeIterator,
325 public MemoryPool<GraphEdgeIterator>
327 :
public EdgeIteratorObserver
331 #if !defined(NDEBUG) && !defined(_OPENMP) 334 Iterator<edge> *itId;
337 GraphEdgeIterator(
const Graph *g, Iterator<edge> *it);
338 ~GraphEdgeIterator()
override;
339 edge next()
override;
340 bool hasNext()
override;