16 #ifndef polybori_groebner_add_up_h_
17 #define polybori_groebner_add_up_h_
26 std::vector<Monomial>& vec,
int start,
int end){
34 case 1:
return vec[start].diagram();
36 return (vec[start]+vec[start+1]).diagram();
43 if (vec[start].isOne())
return Polynomial(end-start, vec[start].ring()).
diagram();
47 vec[start].popFirst();
48 for(limes=start+1;limes<end;limes++){
49 if (vec[limes].isOne()||(*vec[limes].begin()!=idx)){
50 PBORI_ASSERT((vec[limes].isOne())||(*vec[limes].begin()>idx));
53 vec[limes].popFirst();
62 std::vector<Exponent>& vec,
int start,
int end){
85 vec[start].popFirst();
86 for(limes=start+1;limes<end;limes++){
87 if (
PBORI_UNLIKELY((vec[limes].deg()==0)||(*vec[limes].begin()!=idx))){
88 PBORI_ASSERT((vec[limes].deg()==0)||(*vec[limes].begin()>idx));
91 vec[limes].popFirst();
103 std::vector<Monomial::const_iterator>& vec,
int start,
int end){
126 for(limes=start+1;limes<end;limes++){
127 if (vec[limes].isConstant()||(*vec[limes]!=idx)){
128 PBORI_ASSERT((vec[limes].isTerminated())||(*vec[limes]>idx));
135 return MonomialSet(idx,add_up_lex_sorted_monomial_navs(vec,start,limes),add_up_lex_sorted_monomial_navs(vec,limes,end));
143 std::vector<Exponent> vec_sorted=vec;
148 vec_sorted,0,vec_sorted.size());
158 if (s==1)
return res_vec[start];
170 int s=res_vec.size();
172 if (s==1)
return res_vec[0];
209 if (s==0)
return init;
221 int s=res_vec.size();
222 if (s==0)
return init;
Polynomial add_up_exponents(const std::vector< Exponent > &vec, const Polynomial &init)
Definition: add_up.h:140
#define END_NAMESPACE_PBORIGB
Definition: groebner_defs.h:16
Polynomial add_up_polynomials(const std::vector< Polynomial > &vec, const Polynomial &init)
Definition: add_up.h:238
const ring_type & ring() const
Access ring, where this belongs to.
Definition: BoolePolynomial.h:478
This class reinterprets decicion diagram managers as Boolean polynomial rings, adds an ordering and v...
Definition: BoolePolyRing.h:40
BoolePolynomial Polynomial
Definition: embed.h:51
#define BEGIN_NAMESPACE_PBORIGB
Definition: groebner_defs.h:15
Polynomial add_up_generic(const std::vector< T > &res_vec, Polynomial init)
Definition: add_up.h:218
This class wraps the underlying decicion diagram type and defines the necessary operations.
Definition: BoolePolynomial.h:85
Polynomial add_up_monomials(const std::vector< Monomial > &vec, const Polynomial &init)
Definition: add_up.h:231
const dd_type & diagram() const
Read-only access to internal decision diagramm structure.
Definition: BoolePolynomial.h:461
polybori::BooleSet MonomialSet
Definition: groebner_defs.h:45
This class defines LexOrderGreaterComparer.
Definition: LexOrderGreaterComparer.h:28
MonomialSet add_up_lex_sorted_monomials(const BoolePolyRing &ring, std::vector< Monomial > &vec, int start, int end)
Definition: add_up.h:25
#define PBORI_ASSERT(arg)
Definition: pbori_defs.h:118
const dd_type & diagram() const
Read-only access to internal decision diagramm structure.
Definition: BooleMonomial.h:213
MonomialSet add_up_lex_sorted_exponents(const BoolePolyRing &ring, std::vector< Exponent > &vec, int start, int end)
Definition: add_up.h:61
Polynomial unite_polynomials(const std::vector< Polynomial > &res_vec, Polynomial init)
Definition: add_up.h:167
polybori::CTypes::idx_type idx_type
Definition: groebner_defs.h:44
Definition: BooleSet.h:57
BooleMonomial Monomial
Definition: embed.h:53
#define PBORI_UNLIKELY(expression)
Definition: pbori_defs.h:59