#include <COrderingBase.h>
Public Types | |
typedef CCheckedIdx | checked_idx_type |
Check index on input. | |
typedef std::vector< idx_type > | block_idx_type |
Type for block indices. | |
typedef block_idx_type::const_iterator | block_iterator |
Type for block iterators. | |
typedef BooleSet | set_type |
Type of Boolean sets. | |
Adopt polynomial type definitions | |
typedef BoolePolynomial | poly_type |
typedef BooleMonomial | monom_type |
typedef CCuddNavigator | navigator |
typedef BooleExponent | exp_type |
typedef COrderedIter < navigator, monom_type > | ordered_iterator |
typedef COrderedIter < navigator, exp_type > | ordered_exp_iterator |
Public Member Functions | |
COrderingBase () | |
Default constructor. | |
virtual | ~COrderingBase ()=0 |
virtual comp_type | compare (idx_type, idx_type) const =0 |
Comparison of monomials. | |
virtual comp_type | compare (const monom_type &, const monom_type &) const =0 |
virtual comp_type | compare (const exp_type &, const exp_type &) const =0 |
virtual monom_type | lead (const poly_type &) const =0 |
Get leading term. | |
virtual monom_type | lead (const poly_type &, deg_type) const =0 |
Get leading term (using upper bound). | |
virtual exp_type | leadExp (const poly_type &) const =0 |
Get leading exponent. | |
virtual exp_type | leadExp (const poly_type &, deg_type) const =0 |
Get leading exponent (using upper bound). | |
virtual poly_type | leadFirst (const poly_type &) const =0 |
Generates polynomial with leading term first (other terms may be skipped). | |
virtual bool_type | isLexicographical () const =0 |
Check whether ring is lexicographical. | |
virtual bool_type | orderedStandardIteration () const =0 |
Test whether iterators respect order. | |
virtual bool_type | isSymmetric () const =0 |
Test whether variable pertubation do not change the order. | |
virtual bool_type | isDegreeOrder () const =0 |
Test whether we deal with a degree-ordering. | |
virtual bool_type | isBlockOrder () const =0 |
Test whether we deal with a block-ordering. | |
virtual bool_type | isTotalDegreeOrder () const =0 |
Test whether we deal with a total degree-ordering. | |
virtual bool_type | ascendingVariables () const =0 |
Test whether variables are in ascending order. | |
virtual bool_type | descendingVariables () const =0 |
Test whether variables are in descending order. | |
virtual bool_type | isDegreeReverseLexicographical () const =0 |
Test whether ordering is deg-rev-lex ordering. | |
virtual ordered_iterator | leadIteratorBegin (const poly_type &) const =0 |
Initialize iterator corresponding to leading term. | |
virtual ordered_iterator | leadIteratorEnd (const poly_type &) const =0 |
End marker for iterator corresponding to leading term. | |
virtual ordered_exp_iterator | leadExpIteratorBegin (const poly_type &) const =0 |
Initialize exponent iterator corresponding to leading term. | |
virtual ordered_exp_iterator | leadExpIteratorEnd (const poly_type &) const =0 |
End marker for exponent iterator corresponding to leading term. | |
virtual ordercode_type | getOrderCode () const =0 |
Get numerical code for ordering. | |
virtual ordercode_type | getBaseOrderCode () const =0 |
Get numerical code for base ordering (the same for non-block orderings). | |
virtual bool_type | lieInSameBlock (idx_type, idx_type) const =0 |
virtual idx_type | lastBlockStart () const =0 |
Generic procedure to get index, where last block starts. | |
interface for block orderings | |
virtual block_iterator | blockBegin () const |
virtual block_iterator | blockEnd () const |
virtual void | appendBlock (checked_idx_type) |
virtual void | clearBlocks () |
Protected Member Functions | |
monom_type | monom (const set_type &rhs) const |
Get monomial from set of subsets of Boolean variables (internal use only). |
It can be used as an abstract base for runtime-selectable orderings.
Check index on input.
typedef std::vector<idx_type> polybori::COrderingBase::block_idx_type |
Type for block indices.
typedef block_idx_type::const_iterator polybori::COrderingBase::block_iterator |
Type for block iterators.
polybori::COrderingBase::COrderingBase | ( | ) | [inline] |
Default constructor.
polybori::COrderingBase::~COrderingBase | ( | ) | [inline, pure virtual] |
Comparison of monomials.
Implemented in polybori::BlockDegLexOrder, polybori::BlockDegRevLexAscOrder, polybori::DegLexOrder, polybori::DegRevLexAscOrder, and polybori::LexOrder.
virtual comp_type polybori::COrderingBase::compare | ( | const monom_type & | , | |
const monom_type & | ||||
) | const [pure virtual] |
virtual monom_type polybori::COrderingBase::lead | ( | const poly_type & | ) | const [pure virtual] |
Get leading term.
Implemented in polybori::DegLexOrder, polybori::DegRevLexAscOrder, polybori::LexOrder, polybori::CBlockOrderingFacade< OrderType, OrderTag >, polybori::CBlockOrderingFacade< polybori::BlockDegLexOrder, polybori::block_tag >, and polybori::CBlockOrderingFacade< polybori::BlockDegRevLexAscOrder, polybori::block_tag >.
virtual monom_type polybori::COrderingBase::lead | ( | const poly_type & | , | |
deg_type | ||||
) | const [pure virtual] |
Get leading term (using upper bound).
Implemented in polybori::DegLexOrder, polybori::DegRevLexAscOrder, and polybori::LexOrder.
Get leading exponent.
Implemented in polybori::DegLexOrder, polybori::DegRevLexAscOrder, polybori::LexOrder, polybori::CBlockOrderingFacade< OrderType, OrderTag >, polybori::CBlockOrderingFacade< polybori::BlockDegLexOrder, polybori::block_tag >, and polybori::CBlockOrderingFacade< polybori::BlockDegRevLexAscOrder, polybori::block_tag >.
virtual exp_type polybori::COrderingBase::leadExp | ( | const poly_type & | , | |
deg_type | ||||
) | const [pure virtual] |
Get leading exponent (using upper bound).
Implemented in polybori::DegLexOrder, polybori::DegRevLexAscOrder, and polybori::LexOrder.
Generates polynomial with leading term first (other terms may be skipped).
Implemented in polybori::COrderingFacade< OrderType, OrderTag >, polybori::COrderingFacade< polybori::LexOrder, polybori::lex_tag >, polybori::COrderingFacade< polybori::BlockDegRevLexAscOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::BlockDegLexOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::DegLexOrder, polybori::dlex_tag >, and polybori::COrderingFacade< polybori::DegRevLexAscOrder, polybori::dp_asc_tag >.
virtual bool_type polybori::COrderingBase::isLexicographical | ( | ) | const [pure virtual] |
Check whether ring is lexicographical.
Implemented in polybori::COrderingFacade< OrderType, OrderTag >, polybori::COrderingFacade< polybori::LexOrder, polybori::lex_tag >, polybori::COrderingFacade< polybori::BlockDegRevLexAscOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::BlockDegLexOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::DegLexOrder, polybori::dlex_tag >, and polybori::COrderingFacade< polybori::DegRevLexAscOrder, polybori::dp_asc_tag >.
virtual bool_type polybori::COrderingBase::orderedStandardIteration | ( | ) | const [pure virtual] |
Test whether iterators respect order.
Implemented in polybori::COrderingFacade< OrderType, OrderTag >, polybori::COrderingFacade< polybori::LexOrder, polybori::lex_tag >, polybori::COrderingFacade< polybori::BlockDegRevLexAscOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::BlockDegLexOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::DegLexOrder, polybori::dlex_tag >, and polybori::COrderingFacade< polybori::DegRevLexAscOrder, polybori::dp_asc_tag >.
virtual bool_type polybori::COrderingBase::isSymmetric | ( | ) | const [pure virtual] |
Test whether variable pertubation do not change the order.
Implemented in polybori::COrderingFacade< OrderType, OrderTag >, polybori::COrderingFacade< polybori::LexOrder, polybori::lex_tag >, polybori::COrderingFacade< polybori::BlockDegRevLexAscOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::BlockDegLexOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::DegLexOrder, polybori::dlex_tag >, and polybori::COrderingFacade< polybori::DegRevLexAscOrder, polybori::dp_asc_tag >.
virtual bool_type polybori::COrderingBase::isDegreeOrder | ( | ) | const [pure virtual] |
Test whether we deal with a degree-ordering.
Implemented in polybori::COrderingFacade< OrderType, OrderTag >, polybori::COrderingFacade< polybori::LexOrder, polybori::lex_tag >, polybori::COrderingFacade< polybori::BlockDegRevLexAscOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::BlockDegLexOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::DegLexOrder, polybori::dlex_tag >, and polybori::COrderingFacade< polybori::DegRevLexAscOrder, polybori::dp_asc_tag >.
virtual bool_type polybori::COrderingBase::isBlockOrder | ( | ) | const [pure virtual] |
Test whether we deal with a block-ordering.
Implemented in polybori::COrderingFacade< OrderType, OrderTag >, polybori::COrderingFacade< polybori::LexOrder, polybori::lex_tag >, polybori::COrderingFacade< polybori::BlockDegRevLexAscOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::BlockDegLexOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::DegLexOrder, polybori::dlex_tag >, and polybori::COrderingFacade< polybori::DegRevLexAscOrder, polybori::dp_asc_tag >.
virtual bool_type polybori::COrderingBase::isTotalDegreeOrder | ( | ) | const [pure virtual] |
Test whether we deal with a total degree-ordering.
Implemented in polybori::COrderingFacade< OrderType, OrderTag >, polybori::COrderingFacade< polybori::LexOrder, polybori::lex_tag >, polybori::COrderingFacade< polybori::BlockDegRevLexAscOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::BlockDegLexOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::DegLexOrder, polybori::dlex_tag >, and polybori::COrderingFacade< polybori::DegRevLexAscOrder, polybori::dp_asc_tag >.
virtual bool_type polybori::COrderingBase::ascendingVariables | ( | ) | const [pure virtual] |
Test whether variables are in ascending order.
Implemented in polybori::COrderingFacade< OrderType, OrderTag >, polybori::COrderingFacade< polybori::LexOrder, polybori::lex_tag >, polybori::COrderingFacade< polybori::BlockDegRevLexAscOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::BlockDegLexOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::DegLexOrder, polybori::dlex_tag >, and polybori::COrderingFacade< polybori::DegRevLexAscOrder, polybori::dp_asc_tag >.
virtual bool_type polybori::COrderingBase::descendingVariables | ( | ) | const [pure virtual] |
Test whether variables are in descending order.
Implemented in polybori::COrderingFacade< OrderType, OrderTag >, polybori::COrderingFacade< polybori::LexOrder, polybori::lex_tag >, polybori::COrderingFacade< polybori::BlockDegRevLexAscOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::BlockDegLexOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::DegLexOrder, polybori::dlex_tag >, and polybori::COrderingFacade< polybori::DegRevLexAscOrder, polybori::dp_asc_tag >.
virtual bool_type polybori::COrderingBase::isDegreeReverseLexicographical | ( | ) | const [pure virtual] |
Test whether ordering is deg-rev-lex ordering.
Implemented in polybori::COrderingFacade< OrderType, OrderTag >, polybori::COrderingFacade< polybori::LexOrder, polybori::lex_tag >, polybori::COrderingFacade< polybori::BlockDegRevLexAscOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::BlockDegLexOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::DegLexOrder, polybori::dlex_tag >, and polybori::COrderingFacade< polybori::DegRevLexAscOrder, polybori::dp_asc_tag >.
virtual ordered_iterator polybori::COrderingBase::leadIteratorBegin | ( | const poly_type & | ) | const [pure virtual] |
Initialize iterator corresponding to leading term.
Implemented in polybori::COrderingFacade< OrderType, OrderTag >, polybori::COrderingFacade< polybori::LexOrder, polybori::lex_tag >, polybori::COrderingFacade< polybori::BlockDegRevLexAscOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::BlockDegLexOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::DegLexOrder, polybori::dlex_tag >, and polybori::COrderingFacade< polybori::DegRevLexAscOrder, polybori::dp_asc_tag >.
virtual ordered_iterator polybori::COrderingBase::leadIteratorEnd | ( | const poly_type & | ) | const [pure virtual] |
End marker for iterator corresponding to leading term.
Implemented in polybori::COrderingFacade< OrderType, OrderTag >, polybori::COrderingFacade< polybori::LexOrder, polybori::lex_tag >, polybori::COrderingFacade< polybori::BlockDegRevLexAscOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::BlockDegLexOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::DegLexOrder, polybori::dlex_tag >, and polybori::COrderingFacade< polybori::DegRevLexAscOrder, polybori::dp_asc_tag >.
virtual ordered_exp_iterator polybori::COrderingBase::leadExpIteratorBegin | ( | const poly_type & | ) | const [pure virtual] |
Initialize exponent iterator corresponding to leading term.
Implemented in polybori::COrderingFacade< OrderType, OrderTag >, polybori::COrderingFacade< polybori::LexOrder, polybori::lex_tag >, polybori::COrderingFacade< polybori::BlockDegRevLexAscOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::BlockDegLexOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::DegLexOrder, polybori::dlex_tag >, and polybori::COrderingFacade< polybori::DegRevLexAscOrder, polybori::dp_asc_tag >.
virtual ordered_exp_iterator polybori::COrderingBase::leadExpIteratorEnd | ( | const poly_type & | ) | const [pure virtual] |
End marker for exponent iterator corresponding to leading term.
Implemented in polybori::COrderingFacade< OrderType, OrderTag >, polybori::COrderingFacade< polybori::LexOrder, polybori::lex_tag >, polybori::COrderingFacade< polybori::BlockDegRevLexAscOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::BlockDegLexOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::DegLexOrder, polybori::dlex_tag >, and polybori::COrderingFacade< polybori::DegRevLexAscOrder, polybori::dp_asc_tag >.
virtual ordercode_type polybori::COrderingBase::getOrderCode | ( | ) | const [pure virtual] |
Get numerical code for ordering.
Implemented in polybori::COrderingFacade< OrderType, OrderTag >, polybori::COrderingFacade< polybori::LexOrder, polybori::lex_tag >, polybori::COrderingFacade< polybori::BlockDegRevLexAscOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::BlockDegLexOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::DegLexOrder, polybori::dlex_tag >, and polybori::COrderingFacade< polybori::DegRevLexAscOrder, polybori::dp_asc_tag >.
virtual ordercode_type polybori::COrderingBase::getBaseOrderCode | ( | ) | const [pure virtual] |
Get numerical code for base ordering (the same for non-block orderings).
Implemented in polybori::COrderingFacade< OrderType, OrderTag >, polybori::COrderingFacade< polybori::LexOrder, polybori::lex_tag >, polybori::COrderingFacade< polybori::BlockDegRevLexAscOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::BlockDegLexOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::DegLexOrder, polybori::dlex_tag >, and polybori::COrderingFacade< polybori::DegRevLexAscOrder, polybori::dp_asc_tag >.
virtual block_iterator polybori::COrderingBase::blockBegin | ( | ) | const [inline, virtual] |
virtual block_iterator polybori::COrderingBase::blockEnd | ( | ) | const [inline, virtual] |
virtual void polybori::COrderingBase::appendBlock | ( | checked_idx_type | ) | [inline, virtual] |
virtual void polybori::COrderingBase::clearBlocks | ( | ) | [inline, virtual] |
virtual bool_type polybori::COrderingBase::lieInSameBlock | ( | idx_type | , | |
idx_type | ||||
) | const [pure virtual] |
Check, whether two indices are in the same block (true for nonblock orderings)
Implemented in polybori::COrderingFacade< OrderType, OrderTag >, polybori::COrderingFacade< polybori::LexOrder, polybori::lex_tag >, polybori::COrderingFacade< polybori::BlockDegRevLexAscOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::BlockDegLexOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::DegLexOrder, polybori::dlex_tag >, and polybori::COrderingFacade< polybori::DegRevLexAscOrder, polybori::dp_asc_tag >.
virtual idx_type polybori::COrderingBase::lastBlockStart | ( | ) | const [pure virtual] |
Generic procedure to get index, where last block starts.
Implemented in polybori::COrderingFacade< OrderType, OrderTag >, polybori::COrderingFacade< polybori::LexOrder, polybori::lex_tag >, polybori::COrderingFacade< polybori::BlockDegRevLexAscOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::BlockDegLexOrder, polybori::block_tag< TagType > >, polybori::COrderingFacade< polybori::DegLexOrder, polybori::dlex_tag >, and polybori::COrderingFacade< polybori::DegRevLexAscOrder, polybori::dp_asc_tag >.
monom_type polybori::COrderingBase::monom | ( | const set_type & | rhs | ) | const [inline, protected] |
Get monomial from set of subsets of Boolean variables (internal use only).
References polybori::CCuddDDFacade< RingType, DiagramType >::isZero(), and PBORI_UNLIKELY.
Referenced by polybori::LexOrder::lead(), polybori::DegRevLexAscOrder::lead(), and polybori::DegLexOrder::lead().