12 int (*ord)(
const mon &m1,
const mon &m2);
26 cout<<
"les mon"<<endl;
27 for(
int i=0;
i<sizeplace;
i++)
28 cout<<int2mon_[
i]<<
" ";
32 template<
typename mon>
35 template<
typename mon>
38 inline void init_multiple(
int n)
40 multiple=(
int**)
malloc(n*
sizeof(
int*));
45 void reinit_multiple()
47 for(
int i=0;
i<nbvars;
i++)
48 for(
int j=0;
j<sizeplace;
j++)
52 template<
typename typBase>
53 inline int mulind(
int indexbase,
int var,
const typBase &b)
55 if(multiple[var][indexbase]==-2)
64 multiple[var][indexbase]=stock;
67 multiple[var][indexbase]=-1;
71 return multiple[var][indexbase];
76 template<
typename pol>
77 inline void init_nf(
int n)
81 *((
pol**)nfmul+
i)=NULL;
84 template<
typename pol>
89 for(
int i=0;
i<nbvars;
i++)
90 for(
int j=0;
j<sizeplace;
j++)
91 (*((
pol**)nfmul+
i))[
j]=toto;
94 template<
typename pol,
typename typdump,
typename Base>
95 pol nf(
int var ,
int indmon,
const typdump &dump,
const Base & b)
99 if(((*((
pol**)nfmul+var)))[indmon].size==-1)
101 typedef typename typdump::value_type
dumpstruct;
107 typename typdump::const_iterator iter;
111 for(iter=dump.begin();
112 (iter!=dump.end()) && (iter->k!=deg);iter++);
116 for(i=0;i<iter->size;i++)
118 if(iter->nf[i].ind.rep==tmpmon.
rep)
124 ((*((
pol**)nfmul+var)))[indmon]=res;
126 return ((*((
pol**)nfmul+var)))[indmon];
131 template<
typename ptrfun>
134 ord=(int (*)(
const mon &,
const mon &))(tmpord);
140 template<
typename mon>
141 void putmon2(
const mon & m,
const int poscurrent)
150 if((mon2intmon==NULL)||(poscurrent==sizeplace)||
151 (mon2intmon[poscurrent].rep!=m.
rep))
157 mon2intmon=(mon*)MAC_REV_REALLOC<mon>(mon2intmon,(sizeplace-1)*
sizeof(
mon)
158 ,(sizeplace)*
sizeof(
mon));
159 mon2intint=(
int*)realloc(mon2intint,sizeplace*
sizeof(
int));
163 for(
int k=sizeplace-1;
k>poscurrent;
k--)
164 mon2intmon[
k]=mon2intmon[
k-1];
168 memmove((mon2intint+poscurrent+1),(mon2intint+poscurrent),
169 (sizeplace-1-poscurrent)*
sizeof(
int));
171 for(i=0;i<sizeplace-1;i++)
172 if (int2mon_[i]==
mon(-1))
break;
175 int2mon_=(mon*)MAC_REV_REALLOC<mon>(int2mon_,(sizeplace-1)*
sizeof(
mon)
176 ,sizeplace*
sizeof(mon));
178 for(
int k=0;
k<nbvars;
k++)
181 multiple[
k]=(
int*)realloc(multiple[
k],sizeplace*
sizeof(
int));
182 multiple[
k][sizeplace-1]=-2;
186 for(
int k=0;
k<nbvars;
k++)
201 mon2intint[poscurrent]=
i;
202 mon2intmon[poscurrent]=m;
209 template<
typename mon>
212 int inf=0,sup=sizeplace,poscurrent=0;
216 for(poscurrent=sizeplace/2;ord(mon2intmon[poscurrent+1],
218 ord(m,mon2intmon[poscurrent-1]);)
220 if(ord(mon2intmon[poscurrent],m)>0)
223 poscurrent=(inf+sup)/2;
228 poscurrent=(inf+sup)/2;
236 template<
typename mon>
239 int inf=0,sup,poscurrent,
i;
242 for(poscurrent=sizeplace/2;ord(mon2intmon[poscurrent+1],
245 mon2intmon[poscurrent-1]);)
247 if(ord(mon2intmon[poscurrent],m)>0)
250 poscurrent=(inf+sup)/2;
255 poscurrent=(inf+sup)/2;
259 if(mon2intmon[poscurrent]!=m)
262 int2mon_[poscurrent]=
mon(-1);
264 memmove((mon2intmon+poscurrent),(mon2intmon+poscurrent+1),
265 (sizeplace-poscurrent-2)*
sizeof(mon));
266 memmove((mon2intint+poscurrent),(mon2intint+poscurrent+1),
267 (sizeplace-poscurrent-2)*
sizeof(
int));
270 mon2intmon=(mon*)realloc(mon2intmon,sizeplace*
sizeof(mon));
271 mon2intint=(
int*)realloc(mon2intint,sizeplace*
sizeof(
int));
277 template<
typename mon>
282 template<
typename mon>
287 template<
typename mon>
290 res=
mon(1,(int2mon_+i)->rep);
293 template<
typename mon>
300 int inf=0,sup=sizeplace,poscurrent;
305 if(sizeplace==0) {mon2intmon=NULL;mon2intint=NULL;
310 for(poscurrent=sizeplace/2;(sup-inf>1)&&
311 (mon2intmon[poscurrent].rep!=m.
rep);)
314 if(ord(mon2intmon[poscurrent],m)>0)
317 poscurrent=(inf+sup)/2;
322 poscurrent=(inf+sup)/2;
327 if (mon2intmon[poscurrent].rep!=m.
rep)
329 if (ord(mon2intmon[poscurrent],m)<0) poscurrent++;
337 return mon2intint[poscurrent];
340 template<
typename typPk,
typename typdump>
343 typedef typename typPk::value_type::monom_t
mon;
344 typedef typename typdump::value_type dumpstruct;
351 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
352 if(j<iter->size&&!
Iszero(iter->nf[j]))
355 iter->nf[
i]=iter->nf[
j];
358 for(
typename typdump::iterator iter=dump.begin();iter!=dump.end();iter++)
363 iterdump!=iter->nf+iter->size;iterdump++)
365 if(j<iterdump->size&&!
Iszero(iterdump->nf[j]))
367 iterdump->nf[
i]=iterdump->nf[
j];
374 int2mon_[
i]=int2mon_[
j];
376 for(pos1=0;mon2intint[pos1]!=
j;pos1++);
377 for(pos2=0;mon2intint[pos2]!=
i;pos2++);
382 for(
int k=0;
k<nbvars;
k++)
384 for(
int l=0;l<sizeplace;l++)
386 if(multiple[
k][l]==i)
388 else if(multiple[
k][l]==j)
391 int stock=multiple[
k][
i];
392 multiple[
k][
i]=multiple[
k][
j];
393 multiple[
k][
j]=stock;
397 for(
int k=0;
k<nbvars;
k++)
410 int2mon_=(mon*)MAC_REV_REALLOC<mon>(int2mon_,sizeplace*
sizeof(mon)
413 for(
int i=0;i<nbvars;i++)
414 multiple[i]=(
int *)realloc(multiple[i],k*
sizeof(
int));
417 for(
int i=0;i<nbvars;i++)
432 for(k=0;mon2intint[
k]!=
j;k++);
434 memmove(mon2intint+k,mon2intint+k+1,(sizeplace-k-1)*
sizeof(
int));
435 for(
int i=k;i<sizeplace-1;i++)
436 mon2intmon[i]=mon2intmon[i+1];
437 mon2intmon[sizeplace-1]=
mon(0);
439 mon2intint=(
int*)MAC_REV_REALLOC<int>(mon2intint,sizeplace*
sizeof(
int)
440 ,(sizeplace-1)*
sizeof(
int));
441 mon2intmon=(mon*)MAC_REV_REALLOC<mon>(mon2intmon,sizeplace*
sizeof(mon)
442 ,(sizeplace-1)*
sizeof(mon));
448 int tmpsize=sizeplace;
450 for(
int k=i+2;
k<tmpsize;
k++)
457 template<
typename typPk,
typename typdump>
460 typedef typename typPk::value_type::monom_t
mon;
461 typedef typename typPk::value_type::coeff_t coeff;
462 typedef typename typdump::value_type dumpstruct;
465 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
469 for(k=i;k>=0&&
Iszero(iter->nf[k]);k--);
471 iter->nf=(coeff*)MAC_REV_REALLOC<coeff>(iter->nf
472 ,iter->size*
sizeof(coeff)
473 ,(k+1)*
sizeof(coeff));
478 for(
typename typdump::iterator iter=dump.begin();
479 iter!=dump.end();iter++)
483 iterdump!=iter->nf+iter->size;iterdump++)
487 for(k=i;k>=0&&
Iszero(iterdump->nf[k]);k--);
488 iterdump->nf=(coeff*)MAC_REV_REALLOC<coeff>(iterdump->nf
489 ,iterdump->size*
sizeof(coeff)
490 ,(k+1)*
sizeof(coeff));
496 template<
typename typdump,
typename Base,
typename typPk>
500 typedef typename typPk::value_type
pol;
524 for(;!
IsinB(tmpmon,b);i--)
535 template<
typename typPk,
typename typdump>
536 void swap_all(
int i,
int j, typPk & Pk , typPk & redspol,typdump& dump)
538 typedef typename typPk::value_type::monom_t
mon;
539 typedef typename typdump::value_type dumpstruct;
546 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
547 if(j<iter->size&&!
Iszero(iter->nf[j]))
550 iter->nf[
i]=iter->nf[
j];
553 for(
typename typPk::iterator iter=redspol.begin();iter!=redspol.end();iter++)
554 if(j<iter->size&&!
Iszero(iter->nf[j]))
557 iter->nf[
i]=iter->nf[
j];
561 for(
typename typdump::iterator iter=dump.begin();iter!=dump.end();iter++)
566 iterdump!=iter->nf+iter->size;iterdump++)
568 if(j<iterdump->size&&!
Iszero(iterdump->nf[j]))
570 iterdump->nf[
i]=iterdump->nf[
j];
577 int2mon_[
i]=int2mon_[
j];
579 for(pos1=0;mon2intint[pos1]!=
j;pos1++);
580 for(pos2=0;mon2intint[pos2]!=
i;pos2++);
585 for(
int k=0;
k<nbvars;
k++)
587 for(
int l=0;l<sizeplace;l++)
589 if(multiple[
k][l]==i)
591 else if(multiple[
k][l]==j)
594 int stock=multiple[
k][
i];
595 multiple[
k][
i]=multiple[
k][
j];
596 multiple[
k][
j]=stock;
600 for(
int k=0;
k<nbvars;
k++)
610 template<
typename typPk,
typename typdump>
611 void Docompress(
int i, typPk & Pk, typPk & redspol,typdump& dump)
613 typedef typename typPk::value_type::monom_t
mon;
614 typedef typename typPk::value_type::coeff_t coeff;
615 typedef typename typdump::value_type dumpstruct;
618 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
622 for(k=i;k>=0&&
Iszero(iter->nf[k]);k--);
624 iter->nf=(coeff*)MAC_REV_REALLOC<coeff>(iter->nf
625 ,iter->size*
sizeof(coeff)
626 ,(k+1)*
sizeof(coeff));
630 for(
typename typPk::iterator iter=redspol.begin();iter!=redspol.end();iter++)
634 for(k=i;k>=0&&
Iszero(iter->nf[k]);k--);
636 iter->nf=(coeff*)MAC_REV_REALLOC<coeff>(iter->nf
637 ,iter->size*
sizeof(coeff)
638 ,(k+1)*
sizeof(coeff));
643 for(
typename typdump::iterator iter=dump.begin();
644 iter!=dump.end();iter++)
648 iterdump!=iter->nf+iter->size;iterdump++)
652 for(k=i;k>=0&&
Iszero(iterdump->nf[k]);k--);
653 iterdump->nf=(coeff*)MAC_REV_REALLOC<coeff>(iterdump->nf
654 ,iterdump->size*
sizeof(coeff)
655 ,(k+1)*
sizeof(coeff));
661 template<
typename typdump,
typename Base,
typename typPk>
662 void compress(typPk & Pk, typPk &redspol,typdump & dump,
const Base &b,
int k)
665 typedef typename typPk::value_type
pol;
689 for(;!
IsinB(tmpmon,b);i--)
699 MAC_REV_FREE<mon>(int2mon_,sizeplace*
sizeof(
mon));
700 MAC_REV_FREE<mon>(mon2intmon,sizeplace*
sizeof(
mon));
void removemon(const mon &m)
Definition: placemon.hpp:237
void freemon(int j)
Definition: placemon.hpp:426
void * MAC_REV_REALLOC(void *ptr, int size, int newsize)
Definition: memory.hpp:49
void freeint2mon(int k)
Definition: placemon.hpp:407
void freeplace(int p)
Definition: placemon.hpp:283
void compress(typPk &Pk, typdump &dump, const Base &b, int k)
Definition: placemon.hpp:497
typpol nf(int var, int indmon, const typdump &dump, const Base &b)
Definition: corealgo.hpp:1001
void swap_all(int i, int j, typPk &Pk, typdump &dump)
Definition: placemon.hpp:341
void Docompress(int i, typPk &Pk, typdump &dump)
Definition: placemon.hpp:458
int mon2int(const mon &mm)
Definition: placemon.hpp:294
MSKconetypee MSKrealt MSKint32t MSKint32t j
Definition: mosek.h:2421
void int2mon(const int &i, mon &res)
Definition: placemon.hpp:288
MSKint32t k
Definition: mosek.h:2713
R rep
Definition: Monom.hpp:30
C coeff_t
Definition: Monom.hpp:26
void putmon(const mon &m)
Definition: placemon.hpp:210
void affplace(const mon &m, int p)
Definition: placemon.hpp:278
void serveurcompress(int i)
Definition: placemon.hpp:446
int IsinB(const mon &m, const Base &b)
Definition: IsinB3.hpp:68
Mon mon
Definition: solver_bb_floating.cpp:136
exponent_t GetDegree() const
Definition: Monom.hpp:70
MSKint32t MSKint32t MSKint32t i
Definition: mosek.h:2278
int Iszero(const Scl< MPQ > &c)
Definition: Iszero.hpp:14
int sizeplacemon()
Definition: placemon.hpp:136
void putmon2(const mon &m, const int poscurrent)
Definition: placemon.hpp:141
int size
Definition: pol.hpp:10
#define pol
Definition: pol2ter.hpp:3
void SetCoeff(const C &c)
Definition: Monom.hpp:68
void freeplacemon()
Definition: placemon.hpp:697
Multivariate monomials.
Definition: Monom.hpp:21
void setorder(ptrfun tmpord)
Definition: placemon.hpp:132
T * nf
Definition: pol.hpp:12