00001
00002
00042
00043
00044
00045 #include "pbori_defs.h"
00046
00047
00048 #include "COrderBase.h"
00049
00050 #ifndef BlockDegLexOrder_h_
00051 #define BlockDegLexOrder_h_
00052
00053 BEGIN_NAMESPACE_PBORI
00054
00060 class BlockDegLexOrder:
00061 public COrderBase {
00062
00063 public:
00064
00065
00066
00067
00069 typedef BlockDegLexOrder self;
00070
00072
00073 typedef valid_tag blockorder_property;
00074 typedef valid_tag descending_property;
00075 typedef block_dlex_tag order_tag;
00077
00079 typedef std::less<idx_type> idx_comparer_type;
00080
00082 enum { order_code = CTypes::block_dlex, baseorder_code = CTypes::dlex };
00083
00085 BlockDegLexOrder(): base(), m_indices() {
00086 m_indices.push_back(0);
00087 m_indices.push_back(CTypes::max_idx);
00088 };
00089
00091 BlockDegLexOrder(const self& rhs): base(rhs), m_indices(rhs.m_indices) {};
00092
00094 ~BlockDegLexOrder() {};
00095
00097 comp_type compare(idx_type, idx_type) const;
00098
00100 comp_type compare(const monom_type&, const monom_type&) const;
00101
00103 comp_type compare(const exp_type&, const exp_type&) const;
00104
00106 monom_type lead(const poly_type&) const;
00107
00109 monom_type lead(const poly_type& poly, deg_type) const;
00110
00112 exp_type leadExp(const poly_type&) const;
00113
00115 exp_type leadExp(const poly_type&, deg_type) const;
00116
00118 indirect_iterator leadIteratorBegin(const poly_type&) const;
00119 indirect_iterator leadIteratorEnd() const;
00120 indirect_exp_iterator leadExpIteratorBegin(const poly_type&) const;
00121 indirect_exp_iterator leadExpIteratorEnd() const;
00122
00124
00125 block_iterator blockBegin() const { return m_indices.begin() + 1; }
00126 block_iterator blockEnd() const { return m_indices.end(); }
00127 void appendBlock(idx_type idx) {
00128 m_indices.back() = idx;
00129 m_indices.push_back(CTypes::max_idx);
00130 }
00131 void clearBlocks() {
00132 m_indices.clear();
00133 m_indices.push_back(0);
00134 m_indices.push_back(CTypes::max_idx);
00135 }
00137
00138 private:
00139 block_idx_type m_indices;
00140 };
00141
00142
00143 END_NAMESPACE_PBORI
00144
00145 #endif // BlockDegLexOrder_h_