00001 // -*- c++ -*- 00002 //***************************************************************************** 00054 //***************************************************************************** 00055 00056 // include basic definitions 00057 #include "pbori_defs.h" 00058 00059 // include ordering tags 00060 #include "pbori_tags.h" 00061 00062 // include polybori functionals 00063 #include "pbori_func.h" 00064 00065 #ifndef COrderProperties_h_ 00066 #define COrderProperties_h_ 00067 00068 BEGIN_NAMESPACE_PBORI 00069 00074 template <class OrderType> 00075 class COrderProperties { 00076 00077 public: 00079 typedef OrderType order_type; 00080 00082 00083 typedef typename order_type::lex_property lex_property; 00084 typedef typename order_type::ordered_property ordered_property; 00085 typedef typename order_type::symmetry_property symmetry_property; 00086 typedef typename order_type::degorder_property degorder_property; 00087 typedef typename order_type::blockorder_property blockorder_property; 00088 typedef typename order_type::totaldegorder_property totaldegorder_property; 00089 typedef typename order_type::ascending_property ascending_property; 00090 typedef typename order_type::descending_property descending_property; 00091 typedef typename order_type::degrevlexorder_property degrevlexorder_property; 00093 00095 00096 typedef typename order_type::size_type size_type; 00097 typedef typename order_type::idx_type idx_type; 00098 typedef typename order_type::bool_type bool_type; 00099 typedef typename order_type::ostream_type ostream_type; 00100 typedef typename order_type::hash_type hash_type; 00102 00104 enum { order_code = order_type::order_code }; 00105 00107 typedef typename order_type::idx_comparer_type idx_comparer_type; 00108 00110 is_same_type<ordered_property, valid_tag> orderedStandardIteration; 00111 00113 is_same_type<lex_property, valid_tag> isLexicographical; 00114 00116 is_same_type<symmetry_property, valid_tag> isSymmetric; 00117 00119 is_same_type<degorder_property, valid_tag> isDegreeOrder; 00120 00122 is_same_type<blockorder_property, valid_tag> isBlockOrder; 00123 00125 is_same_type<totaldegorder_property, valid_tag> isTotalDegreeOrder; 00126 00128 is_same_type<ascending_property, valid_tag> ascendingVariables; 00129 00131 is_same_type<descending_property, valid_tag> descendingVariables; 00132 00134 is_same_type<degrevlexorder_property, valid_tag> 00135 isDegreeReverseLexicograpical; 00136 }; 00137 00138 00139 END_NAMESPACE_PBORI 00140 00141 #endif