1 #ifndef ALREADY_placemon3
2 #define ALREADY_placemon3
13 template<
class mon,
typename pol>
18 recursive_mutex servmutex;
30 cout<<
"les mon"<<endl;
32 cout<<int2mon_[
i]<<
" ";
38 MAC_REV_FREE<int>(
mon2intint,sizeplace*
sizeof(int));
49 sizeplace=0;int2mon_=NULL;mon2intmon=NULL;mon2intint=NULL;
64 multiple=(
int**)
malloc(n*
sizeof(
int*));
74 void reinit_multiple_th()
87 #ifdef REENTRANT_DEBUG
93 #ifdef REENTRANT_DEBUG
99 template<
typename typBase>
100 inline int mulind_th(
int indexbase,
int var,
const typBase &b)
105 if(multiple[var][indexbase]==-2)
113 stock=mon2int_th(tmpmon);
114 multiple[var][indexbase]=stock;
117 multiple[var][indexbase]=-1;
120 res=multiple[var][indexbase];
125 template<
typename typBase>
126 inline int mulind(
int indexbase,
int var,
const typBase &b)
129 #ifdef REENTRANT_DEBUG
133 if(multiple[var][indexbase]==-2)
142 multiple[var][indexbase]=stock;
145 multiple[var][indexbase]=-1;
149 tmp=multiple[var][indexbase];
150 #ifdef REENTRANT_DEBUG
160 inline void init_nf(
int n)
162 #ifdef REENTRANT_DEBUG
168 *((
pol**)nfmul+
i)=NULL;
169 #ifdef REENTRANT_DEBUG
184 (*((
pol**)nfmul+
i))[
j]=toto;
190 #ifdef REENTRANT_DEBUG
198 (*((
pol**)nfmul+
i))[
j]=toto;
199 #ifdef REENTRANT_DEBUG
206 template<
typename typdump,
typename Base>
207 pol nf_th(
int var ,
int indmon,
const typdump &dump,
const Base & b)
212 if(((*((
pol**)nfmul+var)))[indmon].size==-1)
218 if(((*((
pol**)nfmul+var)))[indmon].size==-1)
221 typedef typename typdump::value_type
dumpstruct;
227 typename typdump::const_iterator iter;
231 for(iter=dump.begin();
232 (iter!=dump.end()) && (iter->k!=deg);iter++);
236 for(i=0;i<iter->size;i++)
238 if(iter->nf[i].ind.rep==tmpmon.
rep)
244 ((*((
pol**)nfmul+var)))[indmon]=res;
251 res=(*((
pol**)nfmul+var))[indmon];
256 template<
typename typdump,
typename Base>
257 pol nf(
int var ,
int indmon,
const typdump &dump,
const Base & b)
259 #ifdef REENTRANT_DEBUG
265 if(((*((
pol**)nfmul+var)))[indmon].size==-1)
267 typedef typename typdump::value_type dumpstruct;
273 typename typdump::const_iterator iter;
277 for(iter=dump.begin();
278 (iter!=dump.end()) && (iter->k!=deg);iter++);
282 for(i=0;i<iter->size;i++)
284 if(iter->nf[i].ind.rep==tmpmon.
rep)
290 ((*((
pol**)nfmul+var)))[indmon]=res;
293 #ifdef REENTRANT_DEBUG
296 return (*((
pol**)nfmul+var))[indmon];
300 template<
typename ptrfun>
307 ord=(int (*)(
const mon &,
const mon &))(tmpord);
319 void putmon2_th(
const mon & m,
const int poscurrent)
331 if((mon2intmon==NULL)||(poscurrent==sizeplace)||
332 (mon2intmon[poscurrent].rep!=m.
rep))
334 if((mon2intmon==NULL)||(poscurrent==sizeplace)||
335 (mon2intmon[poscurrent].rep!=m.
rep))
341 mon2intmon=(
mon*)MAC_REV_REALLOC<mon>(mon2intmon,(sizeplace-1)*
sizeof(
mon)
342 ,(sizeplace)*
sizeof(
mon));
343 mon2intint=(
int*)realloc(mon2intint,sizeplace*
sizeof(
int));
347 for(
int k=sizeplace-1;
k>poscurrent;
k--)
348 mon2intmon[
k]=mon2intmon[
k-1];
352 memmove((mon2intint+poscurrent+1),(mon2intint+poscurrent),
353 (sizeplace-1-poscurrent)*
sizeof(
int));
355 for(i=0;i<sizeplace-1;i++)
357 if (int2mon_[i]==
mon(0))
break;
360 int2mon_=(
mon*)MAC_REV_REALLOC<mon>(int2mon_,(sizeplace-1)*
sizeof(
mon)
361 ,sizeplace*
sizeof(
mon));
366 multiple[
k]=(
int*)realloc(multiple[
k],sizeplace*
sizeof(
int));
367 multiple[
k][sizeplace-1]=-2;
375 MAC_REV_REALLOC<pol >
376 ((
void*)*((
pol**)nfmul+k)
377 ,(sizeplace-1)*
sizeof(
pol)
378 ,sizeplace*
sizeof(
pol));
379 ((
pol**)nfmul)[
k][sizeplace-1].size=-1;
386 mon2intint[poscurrent]=
i;
387 mon2intmon[poscurrent]=m;
401 #ifdef REENTRANT_DEBUG
411 if((mon2intmon==NULL)||(poscurrent==sizeplace)||
412 (mon2intmon[poscurrent].rep!=m.
rep))
414 if((mon2intmon==NULL)||(poscurrent==sizeplace)||
415 (mon2intmon[poscurrent].rep!=m.
rep))
421 mon2intmon=(
mon*)MAC_REV_REALLOC<mon>(mon2intmon,(sizeplace-1)*
sizeof(
mon)
422 ,(sizeplace)*
sizeof(
mon));
423 mon2intint=(
int*)realloc(mon2intint,sizeplace*
sizeof(
int));
427 for(
int k=sizeplace-1;k>poscurrent;k--)
428 mon2intmon[k]=mon2intmon[k-1];
432 memmove((mon2intint+poscurrent+1),(mon2intint+poscurrent),
433 (sizeplace-1-poscurrent)*
sizeof(
int));
435 for(i=0;i<sizeplace-1;i++)
437 if (int2mon_[i]==
mon(0))
break;
440 int2mon_=(
mon*)MAC_REV_REALLOC<mon>(int2mon_,(sizeplace-1)*
sizeof(
mon)
441 ,sizeplace*
sizeof(
mon));
446 multiple[
k]=(
int*)realloc(multiple[k],sizeplace*
sizeof(
int));
447 multiple[
k][sizeplace-1]=-2;
455 MAC_REV_REALLOC<pol >
456 ((
void*)*((
pol**)nfmul+k)
457 ,(sizeplace-1)*
sizeof(
pol)
458 ,sizeplace*
sizeof(
pol));
459 ((
pol**)nfmul)[
k][sizeplace-1].size=-1;
466 mon2intint[poscurrent]=
i;
467 mon2intmon[poscurrent]=m;
472 #ifdef REENTRANT_DEBUG
486 #ifdef REENTRANT_DEBUG
491 for(poscurrent=sizeplace/2;
ord(mon2intmon[poscurrent+1],
493 ord(m,mon2intmon[poscurrent-1]);)
495 if(
ord(mon2intmon[poscurrent],m)>0)
498 poscurrent=(inf+sup)/2;
503 poscurrent=(inf+sup)/2;
507 #ifdef REENTRANT_DEBUG
514 void putmon_th(
const mon & m)
521 for(poscurrent=sizeplace/2;
ord(mon2intmon[poscurrent+1],
523 ord(m,mon2intmon[poscurrent-1]);)
525 if(
ord(mon2intmon[poscurrent],m)>0)
528 poscurrent=(inf+sup)/2;
533 poscurrent=(inf+sup)/2;
537 putmon2_th(m,poscurrent);
543 void removemon_th(
const mon &m)
545 int inf=0,sup,poscurrent,
i;
549 for(poscurrent=sizeplace/2;
ord(mon2intmon[poscurrent+1],
552 mon2intmon[poscurrent-1]);)
554 if(
ord(mon2intmon[poscurrent],m)>0)
557 poscurrent=(inf+sup)/2;
562 poscurrent=(inf+sup)/2;
566 if(mon2intmon[poscurrent]!=m)
571 if(mon2intmon[poscurrent]!=m)
576 int2mon_[poscurrent]=
mon(0);
578 memmove((mon2intmon+poscurrent),(mon2intmon+poscurrent+1),
579 (sizeplace-poscurrent-2)*
sizeof(
mon));
580 memmove((mon2intint+poscurrent),(mon2intint+poscurrent+1),
581 (sizeplace-poscurrent-2)*
sizeof(
int));
585 mon2intmon=(
mon*)realloc(mon2intmon,sizeplace*
sizeof(
mon));
586 mon2intint=(
int*)realloc(mon2intint,sizeplace*
sizeof(
int));
598 int inf=0,sup,poscurrent,
i;
599 #ifdef REENTRANT_DEBUG
605 for(poscurrent=sizeplace/2;
ord(mon2intmon[poscurrent+1],
608 mon2intmon[poscurrent-1]);)
610 if(
ord(mon2intmon[poscurrent],m)>0)
613 poscurrent=(inf+sup)/2;
618 poscurrent=(inf+sup)/2;
622 if(mon2intmon[poscurrent]!=m)
624 if(mon2intmon[poscurrent]!=m)
629 int2mon_[poscurrent]=
mon(0);
631 memmove((mon2intmon+poscurrent),(mon2intmon+poscurrent+1),
632 (sizeplace-poscurrent-2)*
sizeof(
mon));
633 memmove((mon2intint+poscurrent),(mon2intint+poscurrent+1),
634 (sizeplace-poscurrent-2)*
sizeof(
int));
638 mon2intmon=(
mon*)realloc(mon2intmon,sizeplace*
sizeof(
mon));
639 mon2intint=(
int*)realloc(mon2intint,sizeplace*
sizeof(
int));
642 #ifdef REENTRANT_DEBUG
671 res=
mon(1,(int2mon_+i)->rep);
685 #ifdef REENTRANT_DEBUG
694 if(sizeplace==0) {mon2intmon=NULL;mon2intint=NULL;
699 for(poscurrent=sizeplace/2;(sup-inf>1)&&
700 (mon2intmon[poscurrent].rep!=m.
rep);)
703 if(
ord(mon2intmon[poscurrent],m)>0)
706 poscurrent=(inf+sup)/2;
711 poscurrent=(inf+sup)/2;
716 if (mon2intmon[poscurrent].rep!=m.
rep)
718 if (
ord(mon2intmon[poscurrent],m)<0) poscurrent++;
726 #ifdef REENTRANT_DEBUG
730 return mon2intint[poscurrent];
734 int inline mon2int_th(
const mon &mm)
756 for(poscurrent=sizeplace/2;(sup-inf>1)&&
757 (mon2intmon[poscurrent].rep!=m.
rep);)
760 if(
ord(mon2intmon[poscurrent],m)>0)
763 poscurrent=(inf+sup)/2;
768 poscurrent=(inf+sup)/2;
774 if (mon2intmon[poscurrent].rep!=m.
rep)
776 if (
ord(mon2intmon[poscurrent],m)<0) poscurrent++;
781 putmon2_th(m,poscurrent);
784 res=mon2intint[poscurrent];
790 template<
typename typPk,
typename typdump>
795 typedef typename typPk::value_type::coeff_t coeff;
797 typedef typename typdump::value_type dumpstruct;
804 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
805 cout<<
"swap "<<invconv<Poly>(*iter)<<endl;
806 cout<<
"je swap "<<tmpmon<<
" et "<<tmpmon2<<endl;
808 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
809 if(j/8<iter->sizenf && ((iter->nfind[j/8]>>(j%8))&1))
812 cout<<
"swapall "<<i<<
" "<<j<<
" iter->nf[j] "<<endl;
816 int indicej=0,indicei=0;
818 for(
int k=i/8+1;k<=j/8;k++)
819 nbentre+=
nbbits[iter->nfind[k]];
820 nbentre+=
nbbits[iter->nfind[i/8]>>(i%8)];
821 nbentre-=
nbbits[iter->nfind[j/8]>>(j%8)];
825 for(
int k=iter->sizenf-1;k>j/8;k--)
826 indicej+=
nbbits[iter->nfind[
k]];
827 indicej+=
nbbits[iter->nfind[j/8]>>(j%8)];
829 for(
int k=iter->sizenf-1;k>i/8;k--)
830 indicei+=
nbbits[iter->nfind[
k]];
831 indicei+=
nbbits[iter->nfind[i/8]>>(i%8)];
833 cout<<iter->size<<endl<<indicej<<endl<<nbentre<<endl;
834 cout<<
"iter->size-indicej-nbentre+1 "<<iter->size-indicej-nbentre+1<<
" et indice i "<<indicei<<
" indicej "<<indicej<<endl;
836 cout<<
"iter->nf[iter-szie-indicej] "
837 <<iter->nf[iter->size-indicej]<<endl;
838 cout<<
"iter->nf[iter-size-indicej-nbentre] "
839 <<iter->nf[iter->size-indicej-nbentre]<<endl;
841 tmp=iter->nf[iter->size-indicej];
842 if((iter->nfind[i/8]>>(i%8))&1)
844 iter->nf=(coeff*)MAC_REV_REALLOC<coeff>(iter->nf
845 ,iter->size*
sizeof(coeff)
846 ,(iter->size-1)*
sizeof(coeff));
847 iter->nf[iter->size-indicej-nbentre]=tmp;
848 iter->nfind[i/8]|=1<<(i%8);
849 iter->nfind[j/8]&=~(1<<(j%8));
854 for(
int k=0;k<nbentre;k++)
855 iter->nf[iter->size-indicej-k]=iter->nf[iter->size-indicej-k-1];
856 iter->nf[iter->size-indicej-nbentre]=tmp;
857 iter->nfind[i/8]|=1<<(i%8);
858 iter->nfind[j/8]&=~(1<<(j%8));
864 if ((iter->sizenf*8>sizeplace) && ((iter->nfind[iter->sizenf-1]
866 {cout<<
"swapall "<<iter->sizenf<<
" "<<sizeplace<<endl;exit(10);}
869 for(
typename typdump::iterator iter=dump.begin();iter!=dump.end();iter++)
875 iterdump!=iter->nf+iter->size;iterdump++)
878 if(j/8<iterdump->sizenf && (iterdump->nfind[j/8]>>(j%8))&1)
885 for(
int k=i/8+1;k<=j/8;k++)
886 nbentre+=
nbbits[iterdump->nfind[k]];
887 nbentre+=
nbbits[iterdump->nfind[i/8]>>(i%8)];
888 nbentre-=
nbbits[iterdump->nfind[j/8]>>(j%8)];
890 for(
int k=iterdump->sizenf-1;k>j/8;k--)
891 indicej+=
nbbits[iterdump->nfind[
k]];
892 indicej+=
nbbits[iterdump->nfind[j/8]>>(j%8)];
894 tmp=iterdump->nf[iterdump->size-indicej];
895 if((iterdump->nfind[i/8]>>(i%8))&1)
897 iterdump->nf=(coeff*)
898 MAC_REV_REALLOC<coeff>(iterdump->nf
899 ,iterdump->size*
sizeof(coeff)
900 ,(iterdump->size-1)*
sizeof(coeff));
901 iterdump->nf[iterdump->size-indicej-nbentre]=tmp;
902 iterdump->nfind[i/8]|=1<<(i%8);
903 iterdump->nfind[j/8]&=~(1<<(j%8));
909 for(
int k=0;k<nbentre;k++)
910 iterdump->nf[iterdump->size-indicej-k]
911 =iterdump->nf[iterdump->size-indicej-k-1];
912 iterdump->nf[iterdump->size-indicej-nbentre]=tmp;
913 iterdump->nfind[i/8]|=1<<(i%8);
914 iterdump->nfind[j/8]&=~(1<<(j%8));
919 if ((iterdump->sizenf*8>sizeplace) && ((iterdump->nfind[iterdump->sizenf-1]
921 {cout<<
"swapall "<<iterdump->sizenf<<
" "<<sizeplace<<endl;exit(10);}
929 int2mon_[
i]=int2mon_[
j];
931 for(pos1=0;mon2intint[pos1]!=
j;pos1++);
932 for(pos2=0;mon2intint[pos2]!=
i;pos2++);
941 if(multiple[k][l]==i)
943 else if(multiple[k][l]==j)
946 int stock=multiple[
k][
i];
947 multiple[
k][
i]=multiple[
k][
j];
948 multiple[
k][
j]=stock;
954 pol stock=(*((
pol**)nfmul+k))[i];
955 (*((
pol**)nfmul+k))[i]=(*((
pol**)nfmul+
k))[
j];
956 (*((
pol**)nfmul+k))[j]=stock;
965 int2mon_=(
mon*)MAC_REV_REALLOC<mon>(int2mon_,sizeplace*
sizeof(
mon)
969 multiple[i]=(
int *)realloc(multiple[i],k*
sizeof(
int));
974 MAC_REV_REALLOC<pol >(
975 ((
pol**)nfmul)[
i],sizeplace*
sizeof(
pol),k*
sizeof(
pol));
986 for(k=0;mon2intint[
k]!=
j;k++);
988 memmove(mon2intint+k,mon2intint+k+1,(sizeplace-k-1)*
sizeof(
int));
989 for(
int i=k;i<sizeplace-1;i++)
990 mon2intmon[i]=mon2intmon[i+1];
991 mon2intmon[sizeplace-1]=
mon(0);
993 mon2intint=(
int*)MAC_REV_REALLOC<int>(mon2intint,sizeplace*
sizeof(
int)
994 ,(sizeplace-1)*
sizeof(
int));
995 mon2intmon=(
mon*)MAC_REV_REALLOC<mon>(mon2intmon,sizeplace*
sizeof(
mon)
996 ,(sizeplace-1)*
sizeof(
mon));
1012 for(
int k=i;k<tmpsize;k++)
1023 template<
typename typPk,
typename typdump>
1028 typedef typename typPk::value_type::coeff_t coeff;
1029 typedef typename typdump::value_type dumpstruct;
1035 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
1040 for(k=i/8;(k>=0) && !(iter->nfind[k]);k--);
1042 iter->nfind=(
unsigned char*)MAC_REV_REALLOC<unsigned char>(iter->nfind
1046 cout<<
"I "<<i<<
" et iter->sizenf "<<iter->sizenf<<endl;
1052 for(
typename typdump::iterator iter=dump.begin();
1053 iter!=dump.end();iter++)
1057 iterdump!=iter->nf+iter->size;iterdump++)
1061 for(k=i/8;k>=0 && !(iterdump->nfind[
k]);k--);
1062 iterdump->nfind=(
unsigned char*)
1063 MAC_REV_REALLOC<unsigned char>(iterdump->nfind
1066 iterdump->sizenf=k+1;
1075 template<
typename typdump,
typename Base,
typename typPk>
1094 cout<<
"poly avantcompress "<<Pk.size()<<endl;
1095 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
1096 cout<<invconv<Poly>(*iter,*
this)<<endl;
1101 if(!
IsinB(tmpmon,b))
1119 for(;!
IsinB(tmpmon,b);i--)
1133 cout<<
"poly aprescompress "<<Pk.size()<<endl;
1134 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
1135 cout<<invconv<Poly>(*iter,*
this)<<endl;
1144 template<
typename typPk,
typename typdump>
1145 void swap_all(
int i,
int j, typPk & Pk , typPk &res,typdump& dump)
1149 typedef typename typPk::value_type::coeff_t coeff;
1151 typedef typename typdump::value_type dumpstruct;
1158 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
1159 cout<<
"swap "<<invconv<Poly>(*iter)<<endl;
1160 cout<<
"je swap "<<tmpmon<<
" et "<<tmpmon2<<endl;
1162 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
1163 if(j/8<iter->sizenf && ((iter->nfind[j/8]>>(j%8))&1))
1166 cout<<
"swapall "<<i<<
" "<<j<<
" iter->nf[j] "<<endl;
1170 int indicej=0,indicei=0;
1172 for(
int k=i/8+1;k<=j/8;k++)
1173 nbentre+=
nbbits[iter->nfind[k]];
1174 nbentre+=
nbbits[iter->nfind[i/8]>>(i%8)];
1175 nbentre-=
nbbits[iter->nfind[j/8]>>(j%8)];
1179 for(
int k=iter->sizenf-1;k>j/8;k--)
1180 indicej+=
nbbits[iter->nfind[
k]];
1181 indicej+=
nbbits[iter->nfind[j/8]>>(j%8)];
1183 for(
int k=iter->sizenf-1;k>i/8;k--)
1184 indicei+=
nbbits[iter->nfind[
k]];
1185 indicei+=
nbbits[iter->nfind[i/8]>>(i%8)];
1187 cout<<iter->size<<endl<<indicej<<endl<<nbentre<<endl;
1188 cout<<
"iter->size-indicej-nbentre+1 "<<iter->size-indicej-nbentre+1<<
" et indice i "<<indicei<<
" indicej "<<indicej<<endl;
1190 cout<<
"iter->nf[iter-szie-indicej] "
1191 <<iter->nf[iter->size-indicej]<<endl;
1192 cout<<
"iter->nf[iter-size-indicej-nbentre] "
1193 <<iter->nf[iter->size-indicej-nbentre]<<endl;
1195 tmp=iter->nf[iter->size-indicej];
1196 if((iter->nfind[i/8]>>(i%8))&1)
1198 iter->nf=(coeff*)MAC_REV_REALLOC<coeff>(iter->nf
1199 ,iter->size*
sizeof(coeff)
1200 ,(iter->size-1)*
sizeof(coeff));
1201 iter->nf[iter->size-indicej-nbentre]=tmp;
1202 iter->nfind[i/8]|=1<<(i%8);
1203 iter->nfind[j/8]&= ~(1<<(j%8));
1208 for(
int k=0;k<nbentre;k++)
1209 iter->nf[iter->size-indicej-k]=iter->nf[iter->size-indicej-k-1];
1210 iter->nf[iter->size-indicej-nbentre]=tmp;
1211 iter->nfind[i/8]|=1<<(i%8);
1212 iter->nfind[j/8]&= ~(1<<(j%8));
1218 if ((iter->sizenf*8>sizeplace) && ((iter->nfind[iter->sizenf-1]
1219 >>(sizeplace%8))&1))
1220 {cout<<
"swapall "<<iter->sizenf<<
" "<<sizeplace<<endl;exit(10);}
1224 for(
typename typPk::iterator iter=res.begin();iter!=res.end();iter++)
1225 if(j/8<iter->sizenf && ((iter->nfind[j/8]>>(j%8))&1))
1228 cout<<
"swapall "<<i<<
" "<<j<<
" iter->nf[j] "<<endl;
1232 int indicej=0,indicei=0;
1234 for(
int k=i/8+1;k<=j/8;k++)
1235 nbentre+=
nbbits[iter->nfind[k]];
1236 nbentre+=
nbbits[iter->nfind[i/8]>>(i%8)];
1237 nbentre-=
nbbits[iter->nfind[j/8]>>(j%8)];
1241 for(
int k=iter->sizenf-1;k>j/8;k--)
1242 indicej+=
nbbits[iter->nfind[
k]];
1243 indicej+=
nbbits[iter->nfind[j/8]>>(j%8)];
1245 for(
int k=iter->sizenf-1;k>i/8;k--)
1246 indicei+=
nbbits[iter->nfind[
k]];
1247 indicei+=
nbbits[iter->nfind[i/8]>>(i%8)];
1249 cout<<iter->size<<endl<<indicej<<endl<<nbentre<<endl;
1250 cout<<
"iter->size-indicej-nbentre+1 "<<iter->size-indicej-nbentre+1<<
" et indice i "<<indicei<<
" indicej "<<indicej<<endl;
1252 cout<<
"iter->nf[iter-szie-indicej] "
1253 <<iter->nf[iter->size-indicej]<<endl;
1254 cout<<
"iter->nf[iter-size-indicej-nbentre] "
1255 <<iter->nf[iter->size-indicej-nbentre]<<endl;
1257 tmp=iter->nf[iter->size-indicej];
1258 if((iter->nfind[i/8]>>(i%8))&1)
1260 iter->nf=(coeff*)MAC_REV_REALLOC<coeff>(iter->nf
1261 ,iter->size*
sizeof(coeff)
1262 ,(iter->size-1)*
sizeof(coeff));
1263 iter->nf[iter->size-indicej-nbentre]=tmp;
1264 iter->nfind[i/8]|=1<<(i%8);
1265 iter->nfind[j/8]&= ~(1<<(j%8));
1270 for(
int k=0;k<nbentre;k++)
1271 iter->nf[iter->size-indicej-k]=iter->nf[iter->size-indicej-k-1];
1272 iter->nf[iter->size-indicej-nbentre]=tmp;
1273 iter->nfind[i/8]|=1<<(i%8);
1274 iter->nfind[j/8]&= ~(1<<(j%8));
1280 if ((iter->sizenf*8>sizeplace) && ((iter->nfind[iter->sizenf-1]
1281 >>(sizeplace%8))&1))
1282 {cout<<
"swapall "<<iter->sizenf<<
" "<<sizeplace<<endl;exit(10);}
1285 for(
typename typdump::iterator iter=dump.begin();iter!=dump.end();iter++)
1291 iterdump!=iter->nf+iter->size;iterdump++)
1294 if(j/8<iterdump->sizenf && (iterdump->nfind[j/8]>>(j%8))&1)
1301 for(
int k=i/8+1;k<=j/8;k++)
1302 nbentre+=
nbbits[iterdump->nfind[k]];
1303 nbentre+=
nbbits[iterdump->nfind[i/8]>>(i%8)];
1304 nbentre-=
nbbits[iterdump->nfind[j/8]>>(j%8)];
1306 for(
int k=iterdump->sizenf-1;k>j/8;k--)
1307 indicej+=
nbbits[iterdump->nfind[
k]];
1308 indicej+=
nbbits[iterdump->nfind[j/8]>>(j%8)];
1310 tmp=iterdump->nf[iterdump->size-indicej];
1311 if((iterdump->nfind[i/8]>>(i%8))&1)
1313 iterdump->nf=(coeff*)
1314 MAC_REV_REALLOC<coeff>(iterdump->nf
1315 ,iterdump->size*
sizeof(coeff)
1316 ,(iterdump->size-1)*
sizeof(coeff));
1317 iterdump->nf[iterdump->size-indicej-nbentre]=tmp;
1318 iterdump->nfind[i/8]|=1<<(i%8);
1319 iterdump->nfind[j/8]&= ~(1<<(j%8));
1325 for(
int k=0;k<nbentre;k++)
1326 iterdump->nf[iterdump->size-indicej-k]
1327 =iterdump->nf[iterdump->size-indicej-k-1];
1328 iterdump->nf[iterdump->size-indicej-nbentre]=tmp;
1329 iterdump->nfind[i/8]|=1<<(i%8);
1330 iterdump->nfind[j/8]&= ~(1<<(j%8));
1335 if ((iterdump->sizenf*8>sizeplace) && ((iterdump->nfind[iterdump->sizenf-1]
1336 >>(sizeplace%8))&1))
1337 {cout<<
"swapall "<<iterdump->sizenf<<
" "<<sizeplace<<endl;exit(10);}
1345 int2mon_[
i]=int2mon_[
j];
1347 for(pos1=0;mon2intint[pos1]!=
j;pos1++);
1348 for(pos2=0;mon2intint[pos2]!=
i;pos2++);
1353 for(
int k=0;k<
nbvars;k++)
1357 if(multiple[k][l]==i)
1359 else if(multiple[k][l]==j)
1362 int stock=multiple[
k][
i];
1363 multiple[
k][
i]=multiple[
k][
j];
1364 multiple[
k][
j]=stock;
1368 for(
int k=0;k<
nbvars;k++)
1370 pol stock=(*((
pol**)nfmul+k))[i];
1371 (*((
pol**)nfmul+k))[i]=(*((
pol**)nfmul+
k))[
j];
1372 (*((
pol**)nfmul+k))[j]=stock;
1378 template<
typename typPk,
typename typdump>
1382 typedef typename typPk::value_type::coeff_t coeff;
1383 typedef typename typdump::value_type dumpstruct;
1389 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
1393 for(k=i/8;(k>=0) && !(iter->nfind[k]);k--);
1395 iter->nfind=(
unsigned char*)MAC_REV_REALLOC<unsigned char>(iter->nfind
1403 for(
typename typPk::iterator iter=res.begin();iter!=res.end();iter++)
1407 for(k=i/8;(k>=0) && !(iter->nfind[k]);k--);
1409 iter->nfind=(
unsigned char*)MAC_REV_REALLOC<unsigned char>(iter->nfind
1417 for(
typename typdump::iterator iter=dump.begin();
1418 iter!=dump.end();iter++)
1422 iterdump!=iter->nf+iter->size;iterdump++)
1426 for(k=i/8;k>=0 && !(iterdump->nfind[
k]);k--);
1427 iterdump->nfind=(
unsigned char*)
1428 MAC_REV_REALLOC<unsigned char>(iterdump->nfind
1431 iterdump->sizenf=k+1;
1440 template<
typename typdump,
typename Base,
typename typPk>
1441 void compress(typPk & Pk, typPk &res, typdump & dump,
const Base &b,
int k)
1457 if(!
IsinB(tmpmon,b))
1473 for(;!
IsinB(tmpmon,b);i--)
1488 MAC_REV_FREE<mon>(
int2mon_,sizeplace*
sizeof(
mon));
void int2mon(const int &i, mon &res)
Definition: placemon3.hpp:664
void freeplace(int p)
Definition: placemon3.hpp:657
int ** multiple
Definition: placemon3.hpp:26
void ** nfmul
Definition: placemon3.hpp:27
void removemon(const mon &m)
Definition: placemon3.hpp:596
int mon2int(const mon &mm)
Definition: placemon3.hpp:679
void setorder(ptrfun tmpord)
Definition: placemon3.hpp:301
mon * int2mon_
Definition: placemon3.hpp:21
~monomial_server()
Definition: placemon3.hpp:35
void Docompress(int i, typPk &Pk, typPk &res, typdump &dump)
Definition: placemon3.hpp:1379
void putmon2(const mon &m, const int poscurrent)
Definition: placemon3.hpp:398
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: placemon3.hpp:1001
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: placemon3.hpp:980
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: placemon3.hpp:313
exponent_t GetDegree() const
Definition: Monom.hpp:70
void affplace(const mon &m, int p)
Definition: placemon3.hpp:651
void Docompress(int i, typPk &Pk, typdump &dump)
Definition: placemon3.hpp:1024
MSKint32t MSKint32t MSKint32t i
Definition: mosek.h:2278
mon monom_t
Definition: placemon3.hpp:15
void freeplacemon()
Definition: placemon3.hpp:1486
void swap_all(int i, int j, typPk &Pk, typdump &dump)
Definition: placemon3.hpp:791
int size
Definition: pol.hpp:10
void freeint2mon(int k)
Definition: placemon3.hpp:962
void compress(typPk &Pk, typPk &res, typdump &dump, const Base &b, int k)
Definition: placemon3.hpp:1441
int mulind(int indexbase, int var, const typBase &b)
Definition: placemon3.hpp:126
void putmon(const mon &m)
Definition: placemon3.hpp:481
void swap_all(int i, int j, typPk &Pk, typPk &res, typdump &dump)
Definition: placemon3.hpp:1145
#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: placemon3.hpp:1076
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: placemon3.hpp:16