Analysis Software
Documentation for sPHENIX simulation software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
pq_tree.h
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file pq_tree.h
1 /* This software is distributed under the GNU Lesser General Public License */
2 //==========================================================================
3 //
4 // pq_tree.h
5 //
6 //==========================================================================
7 // $Id: pq_tree.h,v 1.20 2008/02/03 18:17:08 chris Exp $
8 
9 #ifndef PQ_TREE_H
10 #define PQ_TREE_H
11 
12 #include <GTL/GTL.h>
13 #include <GTL/pq_node.h>
14 #include <GTL/embedding.h>
15 #include <GTL/debug.h>
16 
17 #include <list>
18 #include <iostream>
19 
21 
30 {
31 public:
36 
41 
45  pq_tree() : root(0), pert_root(0), pseudo(0), fail(0)
46  {
47  }
48 
57  pq_tree(int id, node n, const list<pq_leaf*>& le);
58 
62  ~pq_tree();
63 
80  bool reduce(list<pq_leaf*>& leaves);
81 
100  void replace_pert(int id,
101  node n,
102  const list<pq_leaf*>& le,
103  planar_embedding* em = 0,
104  list<direction_indicator>* dirs = 0);
105 
119  void get_frontier (planar_embedding& em, list<direction_indicator>& dirs);
120 
125  void reset ();
126 
133  pq_node* get_fail()
134  {
135  return fail;
136  }
137 
145  bool is_fail_root()
146  {
147  return failed_at_root;
148  }
149 
159  sons_iterator remove_dir_ind(q_node* q_fail, sons_iterator s_it);
160 
169  bool integrity_check () const;
170 
171 // p_node* insert_P (pq_node*, sons_list&);
172 
173 // q_node* insert_Q (pq_node*, sons_list&);
174 
175 // pq_leaf* insert_leaf (pq_node*);
176 
177 // void insert (pq_node*, pq_node*);
178 private:
191  bool bubble_up (list<pq_leaf*>& leaves);
192 
203  void dfs(pq_node* p,
204  planar_embedding& em,
205  list<direction_indicator>& dirs);
206 
218  pq_node* leads_to_blocked(pq_node* le);
219 
220 
233  bool leads_to(pq_node* le, pq_node* other);
234 
235 
247  pq_node* where_bubble_up_failed(list<pq_leaf*>& leaves);
248 
249 
258  pq_node* blocked_in_subtree(pq_node* n);
259 
260 
261  //
262  // Template Matchings
263  //
264 
265  //---------------------------------------------------------- P-Templates
266 
271  bool P1 (p_node* x, bool);
272 
277  bool P2 (p_node* x);
278 
283  bool P3 (p_node* x);
284 
289  bool P4 (p_node* x);
290 
295  bool P5 (p_node* x);
296 
301  bool P6 (p_node* x);
302 
303  //---------------------------------------------------------- Q-Templates
304 
309  bool Q1 (q_node* x, bool);
310 
315  bool Q2 (q_node* x, bool);
316 
321  bool Q3 (q_node* x);
322 
323 
324  //
325  // Data
326  //
327 
332  list<pq_node*> clear_me;
333 
339 
345 
355 
361 
367 
374 
375  //
376  // Friends
377  //
378 
383  GTL_EXTERN friend ostream& operator<< (ostream&, const pq_tree&);
384 };
385 
387 
388 #endif
389 
390 //--------------------------------------------------------------------------
391 // end of file
392 //--------------------------------------------------------------------------