PolyBoRi
CStackSelector.h
Go to the documentation of this file.
1 // -*- c++ -*-
2 //*****************************************************************************
34 //*****************************************************************************
35 
36 // include basic definitions
37 #include "pbori_defs.h"
38 
39 // include polybori's functionals
40 #include "pbori_func.h"
41 
42 // get stack types, which are used to store and handle paths of current terms
43 #include "CTermStack.h"
44 //#include "CDegTermStack.h"
45 //#include "CBlockTermStack.h"
46 
47 // include standard iterator functionality
48 #include <iterator>
49 
50 
51 #ifndef CStackSelector_h_
52 #define CStackSelector_h_
53 
55 
56 template <class OrderType, class NaviType, class BaseType = internal_tag>
57 class CStackSelector {
58 
60 
61  typedef BaseType base;
62  typedef NaviType navigator;
63  typedef typename OrderType::descending_property descending;
64  typedef typename OrderType::degorder_property deg_prop;
65  typedef typename OrderType::blockorder_property block_prop;
67 
69  typedef CTermStack<navigator, std::forward_iterator_tag, base> lex_type;
70 
72  typedef CDegTermStack<navigator, descending, invalid_tag, base> deg_type;
73 
75  typedef CBlockTermStack<navigator, descending, base> block_type;
76 
78  typedef typename on_same_type<deg_prop, valid_tag,
79  deg_type, lex_type>::type nonblock_type;
80 
81 public:
83  typedef typename on_same_type<block_prop, valid_tag,
84  block_type, nonblock_type>::type type;
85 };
86 
87 
89 
90 #endif