Analysis Software
Documentation for sPHENIX simulation software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
st_number.h
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file st_number.h
1 /* This software is distributed under the GNU Lesser General Public License */
2 //==========================================================================
3 //
4 // st_number.h
5 //
6 //==========================================================================
7 // $Id: st_number.h,v 1.17 2002/12/20 08:26:08 chris Exp $
8 
9 #ifndef GTL_ST_NUMBER_H
10 #define GTL_ST_NUMBER_H
11 
12 #include <GTL/GTL.h>
13 #include <GTL/graph.h>
14 #include <GTL/node_map.h>
15 #include <GTL/edge_map.h>
16 #include <GTL/algorithm.h>
17 
18 #include <list>
19 #include <utility>
20 
22 
27 {
28 public:
29  //---------------------------------------------------------- CONSTRUCTOR
30 
34  pathfinder(const graph& G, edge st, node s);
35 
39  bool is_valid()
40  {
41  return is_biconn;
42  }
43 
44  //------------------------------------------------------------- ITERATOR
45 
50  {
51  public:
55  const_iterator(pathfinder& _pf) : pf (_pf)
56  {
57  }
58 
63 
67  const_iterator& operator++();
71  const_iterator operator++(int);
75  const node& operator*() const
76  {
77  return curr;
78  }
79 
84  {
85  return curr == it.curr;
86  }
87 
92  {
93  return curr != it.curr;
94  }
95  private:
99  enum iteration_state {END, UP, DOWN};
100 
105 
110 
115  };
116 
121  {
122  return const_iterator(*this, n);
123  }
124 
129  {
130  return const_iterator (*this);
131  }
132 
133 private:
134  //------------------------------------------------------------ FUNCTIONS
135 
139  void dfs_sub (node&, node&);
140 
141  //-------------------------------------------------------------- MEMBERS
142 
147 
152 
157 
162 
167 
172 
177 
181  typedef pair<list<edge>::iterator, list<edge>::iterator> pos_pair;
182 
187 
192 
197 
202 
206  bool is_biconn;
207 
212  friend class const_iterator;
213 };
214 
234 {
235 public:
244  {
245  }
246 
250  virtual ~st_number()
251  {
252  }
253 
259  void st_edge(edge e)
260  {
261  st = e;
262  }
263 
269  edge st_edge() const
270  {
271  return st;
272  }
273 
283  void s_node(node n)
284  {
285  s = n;
286  }
287 
293  node s_node() const
294  {
295  return s;
296  }
297 
305  int& operator[](const node& n)
306  {
307  return st_num[n];
308  }
309 
313  typedef list<node>::iterator iterator;
314 
318  typedef list<node>::reverse_iterator reverse_iterator;
319 
327  {
328  return st_ord.begin();
329  }
330 
337  {
338  return st_ord.end();
339  }
340 
349  {
350  return st_ord.rbegin();
351  }
352 
360  {
361  return st_ord.rend();
362  }
363 
364 
380  int check(graph& G);
381 
382 
395  int run(graph& G);
396 
397 
405  void reset()
406  {
407  st_ord.erase (st_ord.begin(), st_ord.end());
408  }
409 protected:
414 
419 
424 
428  list<node> st_ord;
429 
434 };
435 
437 
438 #endif // GTL_ST_NUMBER_H
439 
440 //--------------------------------------------------------------------------
441 // end of file
442 //--------------------------------------------------------------------------