00001
00002
00034
00035
00036
00037 #include "pbori_defs.h"
00038
00039
00040 #include "pbori_func.h"
00041
00042
00043 #include "CTermStack.h"
00044
00045
00046
00047
00048 #include <iterator>
00049
00050
00051 #ifndef CStackSelector_h_
00052 #define CStackSelector_h_
00053
00054 BEGIN_NAMESPACE_PBORI
00055
00056 template <class OrderType, class NaviType, class BaseType = internal_tag>
00057 class CStackSelector {
00058
00060
00061 typedef BaseType base;
00062 typedef NaviType navigator;
00063 typedef typename OrderType::descending_property descending;
00064 typedef typename OrderType::degorder_property deg_prop;
00065 typedef typename OrderType::blockorder_property block_prop;
00067
00069 typedef CTermStack<navigator, std::forward_iterator_tag, base> lex_type;
00070
00072 typedef CDegTermStack<navigator, descending, invalid_tag, base> deg_type;
00073
00075 typedef CBlockTermStack<navigator, descending, base> block_type;
00076
00078 typedef typename on_same_type<deg_prop, valid_tag,
00079 deg_type, lex_type>::type nonblock_type;
00080
00081 public:
00083 typedef typename on_same_type<block_prop, valid_tag,
00084 block_type, nonblock_type>::type type;
00085 };
00086
00087
00088 END_NAMESPACE_PBORI
00089
00090 #endif