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