00001 // -*- c++ -*- 00002 //***************************************************************************** 00072 //***************************************************************************** 00073 00074 // include basic definitions 00075 #include "pbori_defs.h" 00076 00077 // include basic definitions for orderings 00078 #include "pbori_tags.h" 00079 00080 // include polynomial definitions 00081 #include "BoolePolynomial.h" 00082 00083 // include monomial definitions 00084 #include "BooleMonomial.h" 00085 00086 // include exponent vector definitions 00087 #include "BooleExponent.h" 00088 00089 #include "COrderedIter.h" 00090 00091 #ifndef COrderBase_h_ 00092 #define COrderBase_h_ 00093 00094 BEGIN_NAMESPACE_PBORI 00095 00096 00102 class COrderBase: 00103 public CTypes::auxtypes_type { 00104 00105 public: 00106 //------------------------------------------------------------------------- 00107 // types definitions 00108 //------------------------------------------------------------------------- 00109 00111 typedef COrderBase base; 00112 00114 typedef BoolePolynomial poly_type; 00115 00117 typedef poly_type::size_type size_type; 00118 00120 typedef poly_type::deg_type deg_type; 00121 00123 typedef poly_type::idx_type idx_type; 00124 00126 typedef BooleMonomial monom_type; 00127 00128 typedef BoolePolynomial::navigator navigator; 00129 00130 typedef COrderedIter<navigator, monom_type> indirect_iterator; 00131 00133 typedef BooleSet set_type; 00134 00136 typedef BooleExponent exp_type; 00137 00138 typedef COrderedIter<navigator, exp_type> indirect_exp_iterator; 00139 00141 typedef std::vector<idx_type> block_idx_type; 00142 00144 typedef block_idx_type::const_iterator block_iterator; 00145 00147 00148 typedef invalid_tag lex_property; 00149 typedef invalid_tag ordered_property; 00150 typedef invalid_tag symmetry_property; 00151 typedef invalid_tag degorder_property; 00152 typedef invalid_tag blockorder_property; 00153 typedef invalid_tag degrevlexorder_property; 00154 typedef invalid_tag totaldegorder_property; 00155 typedef invalid_tag ascending_property; 00156 typedef invalid_tag descending_property; 00158 00160 COrderBase() {}; 00161 00163 COrderBase(const COrderBase&) {}; 00164 00166 virtual ~COrderBase() {}; 00167 00169 virtual comp_type compare(idx_type, idx_type) const = 0; 00170 00172 virtual comp_type compare(const monom_type&, const monom_type&) const = 0; 00173 00175 virtual comp_type compare(const exp_type&, const exp_type&) const = 0; 00176 00178 virtual monom_type lead(const poly_type&) const = 0; 00179 00181 virtual monom_type lead(const poly_type&, deg_type) const = 0; 00182 00184 virtual exp_type leadExp(const poly_type&) const = 0; 00185 00187 virtual exp_type leadExp(const poly_type&, deg_type) const = 0; 00188 00190 virtual indirect_iterator leadIteratorBegin(const poly_type&) const = 0; 00191 virtual indirect_iterator leadIteratorEnd() const = 0; 00192 virtual indirect_exp_iterator leadExpIteratorBegin(const poly_type&) const = 0; 00193 virtual indirect_exp_iterator leadExpIteratorEnd() const = 0; 00194 00196 00197 virtual block_iterator blockBegin() const { return block_iterator(); } 00198 virtual block_iterator blockEnd() const { return block_iterator(); } 00199 virtual void appendBlock(idx_type) const { } 00200 virtual void clearBlocks() const { } 00202 00203 00204 protected: 00206 monom_type monom(const set_type& rhs) const { return monom_type(rhs); } 00207 }; 00208 00209 END_NAMESPACE_PBORI 00210 00211 #endif