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;