1 #ifndef ALREADY_placemon3
2 #define ALREADY_placemon3
9 template<
class mon,
typename pol>
31 cout<<
"les mon"<<endl;
33 cout<<int2mon_[
i]<<
" ";
78 template<
typename typBase>
79 inline int mulind(
int indexbase,
int var,
const typBase &b)
105 inline void init_nf(
int n)
122 template<
typename typdump,
typename Base>
123 pol nf(
int var ,
int indmon,
const typdump &dump,
const Base & b)
127 if(((*((
pol**)
nfmul+var)))[indmon].size==-1)
129 typedef typename typdump::value_type
dumpstruct;
135 typename typdump::const_iterator iter;
139 for(iter=dump.begin();
140 (iter!=dump.end()) && (iter->k!=deg);iter++);
144 for(i=0;i<iter->size;i++)
146 if(iter->nf[i].ind.rep==tmpmon.
rep)
152 ((*((
pol**)
nfmul+var)))[indmon]=res;
154 return ((*((
pol**)
nfmul+var)))[indmon];
159 template<
typename ptrfun>
162 ord=(int (*)(
const mon &,
const mon &))(tmpord);
179 if((
mon2intmon==NULL)||(poscurrent==sizeplace)||
187 ,(sizeplace)*
sizeof(
mon));
192 for(
int k=sizeplace-1;
k>poscurrent;
k--)
198 (sizeplace-1-poscurrent)*
sizeof(
int));
200 for(i=0;i<sizeplace-1;i++)
205 ,sizeplace*
sizeof(
mon));
219 MAC_REV_REALLOC<pol >
221 ,(sizeplace-1)*
sizeof(
pol)
222 ,sizeplace*
sizeof(
pol));
252 poscurrent=(inf+sup)/2;
257 poscurrent=(inf+sup)/2;
268 int inf=0,sup,poscurrent,
i;
279 poscurrent=(inf+sup)/2;
284 poscurrent=(inf+sup)/2;
294 (sizeplace-poscurrent-2)*
sizeof(
mon));
296 (sizeplace-poscurrent-2)*
sizeof(
int));
343 for(poscurrent=sizeplace/2;(sup-inf>1)&&
350 poscurrent=(inf+sup)/2;
355 poscurrent=(inf+sup)/2;
373 template<
typename typPk,
typename typdump>
378 typedef typename typPk::value_type::coeff_t coeff;
380 typedef typename typdump::value_type dumpstruct;
387 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
388 cout<<
"swap "<<invconv<Poly>(*iter)<<endl;
389 cout<<
"je swap "<<tmpmon<<
" et "<<tmpmon2<<endl;
391 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
392 if(j/8<iter->sizenf && ((iter->nfind[j/8]>>(j%8))&1))
395 cout<<
"swapall "<<i<<
" "<<j<<
" iter->nf[j] "<<endl;
399 int indicej=0,indicei=0;
401 for(
int k=i/8+1;
k<=j/8;
k++)
402 nbentre+=
nbbits[iter->nfind[
k]];
403 nbentre+=
nbbits[iter->nfind[i/8]>>(i%8)];
404 nbentre-=
nbbits[iter->nfind[j/8]>>(j%8)];
408 for(
int k=iter->sizenf-1;
k>j/8;
k--)
409 indicej+=
nbbits[iter->nfind[
k]];
410 indicej+=
nbbits[iter->nfind[j/8]>>(j%8)];
412 for(
int k=iter->sizenf-1;
k>i/8;
k--)
413 indicei+=
nbbits[iter->nfind[
k]];
414 indicei+=
nbbits[iter->nfind[i/8]>>(i%8)];
416 cout<<iter->size<<endl<<indicej<<endl<<nbentre<<endl;
417 cout<<
"iter->size-indicej-nbentre+1 "<<iter->size-indicej-nbentre+1<<
" et indice i "<<indicei<<
" indicej "<<indicej<<endl;
419 cout<<
"iter->nf[iter-szie-indicej] "
420 <<iter->nf[iter->size-indicej]<<endl;
421 cout<<
"iter->nf[iter-size-indicej-nbentre] "
422 <<iter->nf[iter->size-indicej-nbentre]<<endl;
424 tmp=iter->nf[iter->size-indicej];
425 if((iter->nfind[i/8]>>(i%8))&1)
427 iter->nf=(coeff*)MAC_REV_REALLOC<coeff>(iter->nf
428 ,iter->size*
sizeof(coeff)
429 ,(iter->size-1)*
sizeof(coeff));
430 iter->nf[iter->size-indicej-nbentre]=tmp;
431 iter->nfind[i/8]|=1<<(i%8);
432 iter->nfind[j/8]&=~(1<<(j%8));
437 for(
int k=0;
k<nbentre;
k++)
438 iter->nf[iter->size-indicej-
k]=iter->nf[iter->size-indicej-
k-1];
439 iter->nf[iter->size-indicej-nbentre]=tmp;
440 iter->nfind[i/8]|=1<<(i%8);
441 iter->nfind[j/8]&=~(1<<(j%8));
447 if ((iter->sizenf*8>sizeplace) && ((iter->nfind[iter->sizenf-1]
449 {cout<<
"swapall "<<iter->sizenf<<
" "<<sizeplace<<endl;exit(10);}
452 for(
typename typdump::iterator iter=dump.begin();iter!=dump.end();iter++)
458 iterdump!=iter->nf+iter->size;iterdump++)
461 if(j/8<iterdump->sizenf && (iterdump->nfind[j/8]>>(j%8))&1)
468 for(
int k=i/8+1;
k<=j/8;
k++)
469 nbentre+=
nbbits[iterdump->nfind[
k]];
470 nbentre+=
nbbits[iterdump->nfind[i/8]>>(i%8)];
471 nbentre-=
nbbits[iterdump->nfind[j/8]>>(j%8)];
473 for(
int k=iterdump->sizenf-1;
k>j/8;
k--)
474 indicej+=
nbbits[iterdump->nfind[
k]];
475 indicej+=
nbbits[iterdump->nfind[j/8]>>(j%8)];
477 tmp=iterdump->nf[iterdump->size-indicej];
478 if((iterdump->nfind[i/8]>>(i%8))&1)
480 iterdump->nf=(coeff*)
481 MAC_REV_REALLOC<coeff>(iterdump->nf
482 ,iterdump->size*
sizeof(coeff)
483 ,(iterdump->size-1)*
sizeof(coeff));
484 iterdump->nf[iterdump->size-indicej-nbentre]=tmp;
485 iterdump->nfind[i/8]|=1<<(i%8);
486 iterdump->nfind[j/8]&=~(1<<(j%8));
492 for(
int k=0;
k<nbentre;
k++)
493 iterdump->nf[iterdump->size-indicej-
k]
494 =iterdump->nf[iterdump->size-indicej-
k-1];
495 iterdump->nf[iterdump->size-indicej-nbentre]=tmp;
496 iterdump->nfind[i/8]|=1<<(i%8);
497 iterdump->nfind[j/8]&=~(1<<(j%8));
502 if ((iterdump->sizenf*8>sizeplace) && ((iterdump->nfind[iterdump->sizenf-1]
504 {cout<<
"swapall "<<iterdump->sizenf<<
" "<<sizeplace<<endl;exit(10);}
557 MAC_REV_REALLOC<pol >(
572 for(
int i=k;i<sizeplace-1;i++)
577 ,(sizeplace-1)*
sizeof(
int));
579 ,(sizeplace-1)*
sizeof(
mon));
588 for(
int k=i+2;
k<tmpsize;
k++)
595 template<
typename typPk,
typename typdump>
599 typedef typename typPk::value_type::coeff_t coeff;
600 typedef typename typdump::value_type dumpstruct;
603 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
607 for(k=i/8;(k>=0) && !(iter->nfind[k]);k--);
609 iter->nfind=(
unsigned char*)MAC_REV_REALLOC<unsigned char>(iter->nfind
613 cout<<
"I "<<i<<
" et iter->sizenf "<<iter->sizenf<<endl;
619 for(
typename typdump::iterator iter=dump.begin();
620 iter!=dump.end();iter++)
624 iterdump!=iter->nf+iter->size;iterdump++)
628 for(k=i/8;k>=0 && !(iterdump->nfind[
k]);k--);
629 iterdump->nfind=(
unsigned char*)
630 MAC_REV_REALLOC<unsigned char>(iterdump->nfind
633 iterdump->sizenf=k+1;
638 template<
typename typdump,
typename Base,
typename typPk>
651 cout<<
"poly avantcompress "<<Pk.size()<<endl;
652 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
653 cout<<invconv<Poly>(*iter)<<endl;
675 cout<<
"i ici place "<<i<<endl;
677 for(;!
IsinB(tmpmon,b);i--)
686 template<
typename typPk,
typename typdump>
687 void swap_all(
int i,
int j, typPk & Pk , typPk &res,typdump& dump)
691 typedef typename typPk::value_type::coeff_t coeff;
693 typedef typename typdump::value_type dumpstruct;
700 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
701 cout<<
"swap "<<invconv<Poly>(*iter)<<endl;
702 cout<<
"je swap "<<tmpmon<<
" et "<<tmpmon2<<endl;
704 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
705 if(j/8<iter->sizenf && ((iter->nfind[j/8]>>(j%8))&1))
708 cout<<
"swapall "<<i<<
" "<<j<<
" iter->nf[j] "<<endl;
712 int indicej=0,indicei=0;
714 for(
int k=i/8+1;
k<=j/8;
k++)
715 nbentre+=
nbbits[iter->nfind[
k]];
716 nbentre+=
nbbits[iter->nfind[i/8]>>(i%8)];
717 nbentre-=
nbbits[iter->nfind[j/8]>>(j%8)];
721 for(
int k=iter->sizenf-1;
k>j/8;
k--)
722 indicej+=
nbbits[iter->nfind[
k]];
723 indicej+=
nbbits[iter->nfind[j/8]>>(j%8)];
725 for(
int k=iter->sizenf-1;
k>i/8;
k--)
726 indicei+=
nbbits[iter->nfind[
k]];
727 indicei+=
nbbits[iter->nfind[i/8]>>(i%8)];
729 cout<<iter->size<<endl<<indicej<<endl<<nbentre<<endl;
730 cout<<
"iter->size-indicej-nbentre+1 "<<iter->size-indicej-nbentre+1<<
" et indice i "<<indicei<<
" indicej "<<indicej<<endl;
732 cout<<
"iter->nf[iter-szie-indicej] "
733 <<iter->nf[iter->size-indicej]<<endl;
734 cout<<
"iter->nf[iter-size-indicej-nbentre] "
735 <<iter->nf[iter->size-indicej-nbentre]<<endl;
737 tmp=iter->nf[iter->size-indicej];
738 if((iter->nfind[i/8]>>(i%8))&1)
740 iter->nf=(coeff*)MAC_REV_REALLOC<coeff>(iter->nf
741 ,iter->size*
sizeof(coeff)
742 ,(iter->size-1)*
sizeof(coeff));
743 iter->nf[iter->size-indicej-nbentre]=tmp;
744 iter->nfind[i/8]|=1<<(i%8);
745 iter->nfind[j/8]&= ~(1<<(j%8));
750 for(
int k=0;
k<nbentre;
k++)
751 iter->nf[iter->size-indicej-
k]=iter->nf[iter->size-indicej-
k-1];
752 iter->nf[iter->size-indicej-nbentre]=tmp;
753 iter->nfind[i/8]|=1<<(i%8);
754 iter->nfind[j/8]&= ~(1<<(j%8));
760 if ((iter->sizenf*8>sizeplace) && ((iter->nfind[iter->sizenf-1]
762 {cout<<
"swapall "<<iter->sizenf<<
" "<<sizeplace<<endl;exit(10);}
766 for(
typename typPk::iterator iter=res.begin();iter!=res.end();iter++)
767 if(j/8<iter->sizenf && ((iter->nfind[j/8]>>(j%8))&1))
770 cout<<
"swapall "<<i<<
" "<<j<<
" iter->nf[j] "<<endl;
774 int indicej=0,indicei=0;
776 for(
int k=i/8+1;
k<=j/8;
k++)
777 nbentre+=
nbbits[iter->nfind[
k]];
778 nbentre+=
nbbits[iter->nfind[i/8]>>(i%8)];
779 nbentre-=
nbbits[iter->nfind[j/8]>>(j%8)];
783 for(
int k=iter->sizenf-1;
k>j/8;
k--)
784 indicej+=
nbbits[iter->nfind[
k]];
785 indicej+=
nbbits[iter->nfind[j/8]>>(j%8)];
787 for(
int k=iter->sizenf-1;
k>i/8;
k--)
788 indicei+=
nbbits[iter->nfind[
k]];
789 indicei+=
nbbits[iter->nfind[i/8]>>(i%8)];
791 cout<<iter->size<<endl<<indicej<<endl<<nbentre<<endl;
792 cout<<
"iter->size-indicej-nbentre+1 "<<iter->size-indicej-nbentre+1<<
" et indice i "<<indicei<<
" indicej "<<indicej<<endl;
794 cout<<
"iter->nf[iter-szie-indicej] "
795 <<iter->nf[iter->size-indicej]<<endl;
796 cout<<
"iter->nf[iter-size-indicej-nbentre] "
797 <<iter->nf[iter->size-indicej-nbentre]<<endl;
799 tmp=iter->nf[iter->size-indicej];
800 if((iter->nfind[i/8]>>(i%8))&1)
802 iter->nf=(coeff*)MAC_REV_REALLOC<coeff>(iter->nf
803 ,iter->size*
sizeof(coeff)
804 ,(iter->size-1)*
sizeof(coeff));
805 iter->nf[iter->size-indicej-nbentre]=tmp;
806 iter->nfind[i/8]|=1<<(i%8);
807 iter->nfind[j/8]&= ~(1<<(j%8));
812 for(
int k=0;
k<nbentre;
k++)
813 iter->nf[iter->size-indicej-
k]=iter->nf[iter->size-indicej-
k-1];
814 iter->nf[iter->size-indicej-nbentre]=tmp;
815 iter->nfind[i/8]|=1<<(i%8);
816 iter->nfind[j/8]&= ~(1<<(j%8));
822 if ((iter->sizenf*8>sizeplace) && ((iter->nfind[iter->sizenf-1]
824 {cout<<
"swapall "<<iter->sizenf<<
" "<<sizeplace<<endl;exit(10);}
827 for(
typename typdump::iterator iter=dump.begin();iter!=dump.end();iter++)
833 iterdump!=iter->nf+iter->size;iterdump++)
836 if(j/8<iterdump->sizenf && (iterdump->nfind[j/8]>>(j%8))&1)
843 for(
int k=i/8+1;
k<=j/8;
k++)
844 nbentre+=
nbbits[iterdump->nfind[
k]];
845 nbentre+=
nbbits[iterdump->nfind[i/8]>>(i%8)];
846 nbentre-=
nbbits[iterdump->nfind[j/8]>>(j%8)];
848 for(
int k=iterdump->sizenf-1;
k>j/8;
k--)
849 indicej+=
nbbits[iterdump->nfind[
k]];
850 indicej+=
nbbits[iterdump->nfind[j/8]>>(j%8)];
852 tmp=iterdump->nf[iterdump->size-indicej];
853 if((iterdump->nfind[i/8]>>(i%8))&1)
855 iterdump->nf=(coeff*)
856 MAC_REV_REALLOC<coeff>(iterdump->nf
857 ,iterdump->size*
sizeof(coeff)
858 ,(iterdump->size-1)*
sizeof(coeff));
859 iterdump->nf[iterdump->size-indicej-nbentre]=tmp;
860 iterdump->nfind[i/8]|=1<<(i%8);
861 iterdump->nfind[j/8]&= ~(1<<(j%8));
867 for(
int k=0;
k<nbentre;
k++)
868 iterdump->nf[iterdump->size-indicej-
k]
869 =iterdump->nf[iterdump->size-indicej-
k-1];
870 iterdump->nf[iterdump->size-indicej-nbentre]=tmp;
871 iterdump->nfind[i/8]|=1<<(i%8);
872 iterdump->nfind[j/8]&= ~(1<<(j%8));
877 if ((iterdump->sizenf*8>sizeplace) && ((iterdump->nfind[iterdump->sizenf-1]
879 {cout<<
"swapall "<<iterdump->sizenf<<
" "<<sizeplace<<endl;exit(10);}
920 template<
typename typPk,
typename typdump>
924 typedef typename typPk::value_type::coeff_t coeff;
925 typedef typename typdump::value_type dumpstruct;
928 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
932 for(k=i/8;(k>=0) && !(iter->nfind[k]);k--);
934 iter->nfind=(
unsigned char*)MAC_REV_REALLOC<unsigned char>(iter->nfind
942 for(
typename typPk::iterator iter=res.begin();iter!=res.end();iter++)
946 for(k=i/8;(k>=0) && !(iter->nfind[k]);k--);
948 iter->nfind=(
unsigned char*)MAC_REV_REALLOC<unsigned char>(iter->nfind
956 for(
typename typdump::iterator iter=dump.begin();
957 iter!=dump.end();iter++)
961 iterdump!=iter->nf+iter->size;iterdump++)
965 for(k=i/8;k>=0 && !(iterdump->nfind[
k]);k--);
966 iterdump->nfind=(
unsigned char*)
967 MAC_REV_REALLOC<unsigned char>(iterdump->nfind
970 iterdump->sizenf=k+1;
975 template<
typename typdump,
typename Base,
typename typPk>
1004 for(;!
IsinB(tmpmon,b);i--)
1015 MAC_REV_FREE<mon>(
int2mon_,sizeplace*
sizeof(
mon));
void int2mon(const int &i, mon &res)
Definition: placemon3.hpp:664
void freeplace(int p)
Definition: placemon3sdp.hpp:314
int ** multiple
Definition: placemon3.hpp:26
void ** nfmul
Definition: placemon3.hpp:27
void removemon(const mon &m)
Definition: placemon3sdp.hpp:266
int mon2int(const mon &mm)
Definition: placemon3.hpp:679
void setorder(ptrfun tmpord)
Definition: placemon3sdp.hpp:160
mon * int2mon_
Definition: placemon3.hpp:21
~monomial_server()
Definition: placemon3.hpp:35
void Docompress(int i, typPk &Pk, typPk &res, typdump &dump)
Definition: placemon3sdp.hpp:921
void putmon2(const mon &m, const int poscurrent)
Definition: placemon3sdp.hpp:170
int sizeplace
Definition: placemon3.hpp:20
void init_multiple(int n)
Definition: placemon3.hpp:59
int * mon2intint
Definition: placemon3.hpp:23
void serveurcompress(int i)
Definition: placemon3sdp.hpp:584
typpol nf(int var, int indmon, const typdump &dump, const Base &b)
Definition: corealgo.hpp:1001
void displaymon()
Definition: placemon3.hpp:28
int nbvars
Definition: placemon3.hpp:25
void freemon(int j)
Definition: placemon3sdp.hpp:563
void reinit_multiple()
Definition: placemon3.hpp:85
MSKconetypee MSKrealt MSKint32t MSKint32t j
Definition: mosek.h:2421
MSKint32t k
Definition: mosek.h:2713
R rep
Definition: Monom.hpp:30
C coeff_t
Definition: Monom.hpp:26
int nbbits[256]
Definition: pol2ter.hpp:4
Definition: placemon3.hpp:14
int IsinB(const mon &m, const Base &b)
Definition: IsinB3.hpp:68
Mon mon
Definition: solver_bb_floating.cpp:136
int sizeplacemon()
Definition: placemon3sdp.hpp:164
exponent_t GetDegree() const
Definition: Monom.hpp:70
void affplace(const mon &m, int p)
Definition: placemon3sdp.hpp:308
void Docompress(int i, typPk &Pk, typdump &dump)
Definition: placemon3sdp.hpp:596
MSKint32t MSKint32t MSKint32t i
Definition: mosek.h:2278
mon monom_t
Definition: placemon3sdp.hpp:11
void freeplacemon()
Definition: placemon3sdp.hpp:1013
void swap_all(int i, int j, typPk &Pk, typdump &dump)
Definition: placemon3sdp.hpp:374
int size
Definition: pol.hpp:10
void freeint2mon(int k)
Definition: placemon3sdp.hpp:545
void compress(typPk &Pk, typPk &res, typdump &dump, const Base &b, int k)
Definition: placemon3sdp.hpp:976
int mulind(int indexbase, int var, const typBase &b)
Definition: placemon3.hpp:126
void putmon(const mon &m)
Definition: placemon3sdp.hpp:239
void swap_all(int i, int j, typPk &Pk, typPk &res, typdump &dump)
Definition: placemon3sdp.hpp:687
#define pol
Definition: pol2ter.hpp:3
void SetCoeff(const C &c)
Definition: Monom.hpp:68
int(* ord)(const mon &m1, const mon &m2)
Definition: placemon3.hpp:24
void compress(typPk &Pk, typdump &dump, const Base &b, int k)
Definition: placemon3sdp.hpp:639
monomial_server()
Definition: placemon3.hpp:48
Multivariate monomials.
Definition: Monom.hpp:21
T * nf
Definition: pol.hpp:12
mon * mon2intmon
Definition: placemon3.hpp:22
pol pol_t
Definition: placemon3sdp.hpp:12