00001 // -*- c++ -*- 00002 //***************************************************************************** 00081 //***************************************************************************** 00082 00083 // include basic definitions 00084 #include "pbori_defs.h" 00085 00086 // include base order definitions 00087 #include "COrderBase.h" 00088 00089 #ifndef LexOrder_h_ 00090 #define LexOrder_h_ 00091 00092 BEGIN_NAMESPACE_PBORI 00093 00099 class LexOrder: 00100 public COrderBase { 00101 00102 public: 00103 //------------------------------------------------------------------------- 00104 // types definitions 00105 //------------------------------------------------------------------------- 00106 00108 typedef LexOrder self; 00109 00111 00112 typedef valid_tag lex_property; 00113 typedef valid_tag ordered_property; 00114 typedef valid_tag symmetry_property; 00115 typedef valid_tag descending_property; 00116 typedef lex_tag order_tag; 00118 00120 enum { order_code = CTypes::lp, baseorder_code = order_code }; 00121 00123 typedef std::less<idx_type> idx_comparer_type; 00124 00126 LexOrder(): base() {}; 00127 00129 LexOrder(const self& rhs): base(rhs) {}; 00130 00132 ~LexOrder() {}; 00133 00135 comp_type compare(idx_type, idx_type) const; 00136 00138 comp_type compare(const monom_type&, const monom_type&) const; 00139 00141 comp_type compare(const exp_type&, const exp_type&) const; 00142 00144 monom_type lead(const poly_type&) const; 00145 00147 monom_type lead(const poly_type& poly, deg_type) const { return lead(poly); } 00148 00150 exp_type leadExp(const poly_type&) const; 00151 00153 exp_type leadExp(const poly_type& poly, deg_type) const { 00154 return leadExp(poly); } 00155 00157 indirect_iterator leadIteratorBegin(const poly_type&) const; 00158 indirect_iterator leadIteratorEnd() const; 00159 indirect_exp_iterator leadExpIteratorBegin(const poly_type&) const; 00160 indirect_exp_iterator leadExpIteratorEnd() const; 00161 00162 }; 00163 00164 00165 END_NAMESPACE_PBORI 00166 00167 #endif // LexOrder_h_