Go to the source code of this file.
void densify | ( | const polsparse & | p, | |
poldense & | res | |||
) | [inline] |
Definition at line 30 of file dump.cc.
References mon2int().
00031 { 00032 typedef typename poldense::coeff_t coeff; 00033 res.ind=p.ind; 00034 res.size=0; 00035 for(int i=0;i<p.size;i++) 00036 if(mon2int(p.nf[i])>res.size) res.size=mon2int(p.nf[i]); 00037 res.size++; 00038 res.nf=(coeff*)MAC_REV_MALLOC<coeff>(res.size*sizeof(coeff)); 00039 for(int i=0;i<res.size;i++) 00040 res.nf[i]=0; 00041 for(int i=0;i<p.size;i++) 00042 { 00043 res.nf[mon2int(p.nf[i])]=p.nf[i].GetCoeff(); 00044 } 00045 }
void Dump | ( | const typPk & | Pk, | |
typdump & | dump | |||
) | [inline] |
Definition at line 48 of file dump.cc.
References pol< mon, T >::ind, dumpstruct< pol >::k, MAC_REV_MALLOC(), dumpstruct< pol >::nf, and dumpstruct< pol >::size.
Referenced by algo(), init_algo(), and NewCrochetchoix().
00049 { 00050 typedef typename typdump::value_type dumpstruct; 00051 int i=0; 00052 dumpstruct next; 00053 if(!Pk.empty()) 00054 { 00055 next.k=Pk.front().ind.GetDegree(); 00056 next.size=Pk.size(); 00057 next.nf=(typename dumpstruct::pol_t *)MAC_REV_MALLOC 00058 <typename dumpstruct::pol_t>(Pk.size()* 00059 sizeof(typename dumpstruct::pol_t)); 00060 for(typename typPk::const_iterator iter=Pk.begin();iter!=Pk.end();iter++,i++) 00061 { 00062 next.nf[i]=*iter; 00063 //Tue Dec 4 16:12:10 MET 2001 00064 //sparsify(*iter,next.nf[i]); 00065 //Tue Dec 4 16:12:10 MET 2001 00066 next.nf[i].ind.SetCoeff(1); 00067 // cout<<"dans le dump "<<iter->ind<<" "<<next.nf[i].ind<<endl; 00068 //cout<<"et le ptr "<<iter->nf<<" "<<next.nf[i].nf<<endl; 00069 } 00070 dump.push_back(next); 00071 } 00072 return; 00073 }
void forget | ( | Base & | b, | |
typdump & | dump, | |||
int | k, | |||
typrecall & | recall | |||
) | [inline] |
Definition at line 75 of file dump.cc.
References Base< predicat >::begin(), Base< predicat >::end(), and Base< predicat >::erase().
Referenced by algo(), NewCrochetchoix(), and newPkMkMatrixof().
00079 { 00080 typedef typename Base::mon mon; 00081 typedef typename mon::coeff_t coeff; 00082 typedef typename typdump::value_type::pol_t pol; 00083 typename typdump::iterator iterdump=dump.begin(),stockiter=dump.end(); 00084 //Tue Dec 4 16:12:10 MET 2001 00085 //for(typename typrecall::iterator iter=recall.begin();iter!=recall.end();iter++) 00086 //MAC_REV_FREE<mon>(iter->nf,iter->size*sizeof(mon)); 00087 //Tue Dec 4 16:12:10 MET 2001 00088 for(typename typrecall::iterator iter=recall.begin();iter!=recall.end();iter++) 00089 MAC_REV_FREE<coeff>(iter->nf,iter->size*sizeof(coeff)); 00090 recall.erase(recall.begin(),recall.end()); 00091 //cout<<"destruction dans B"<<endl; 00092 for(typename Base::iterator iter=b.begin();iter!=b.end();iter++) 00093 { 00094 mon *tmp=(mon*)MAC_REV_MALLOC<mon>(iter->taille1*sizeof(mon)); 00095 int tmptaille=0; 00096 for(int i=0;i<iter->taille1;i++) 00097 if(iter->accept[i].GetDegree()<=k) 00098 //27/08/2001(iter->refuse[i].GetDegree()<=k) 00099 { 00100 tmp[tmptaille++]=iter->accept[i]; 00101 } 00102 //on suppose que le monomes se detruisent tout seuls 00103 //rajouter un destroy mon sinon 00104 if(tmptaille==0) 00105 { 00106 MAC_REV_FREE<mon>(tmp,iter->taille1*sizeof(mon)); 00107 MAC_REV_FREE<mon>(iter->accept,iter->taille1*sizeof(mon)); 00108 MAC_REV_FREE<mon>(iter->refuse,iter->taille2*sizeof(mon)); 00109 b.erase(iter--); 00110 continue; 00111 //tmp[tmptaille++]=mon(1); 00112 } 00113 MAC_REV_FREE<mon>(iter->accept,iter->taille1*sizeof(mon)); 00114 iter->accept=(mon*)MAC_REV_REALLOC<mon>((void*)tmp 00115 ,iter->taille1*sizeof(mon) 00116 ,tmptaille*sizeof(mon)); 00117 iter->taille1=tmptaille; 00118 //pour les refuses 00119 tmp=(mon*)MAC_REV_MALLOC<mon>(iter->taille2*sizeof(mon)); 00120 tmptaille=0; 00121 for(int i=0;i<iter->taille2;i++) 00122 if(iter->refuse[i].GetDegree()<=k) 00123 //27/08/2001(iter->refuse[i].GetDegree()<=k) 00124 { 00125 tmp[tmptaille++]=iter->refuse[i]; 00126 } 00127 //on suppose que les monomes se detruisent tout seuls 00128 //rajouter un destroy mon sinon 00129 MAC_REV_FREE<mon>(iter->refuse,iter->taille2*sizeof(mon)); 00130 //iter->taille2=tmptaille; 00131 //if(tmptaille==0) 00132 //{ 00133 /*free(iter->refuse);*/ 00134 // iter->refuse=NULL; 00135 //} 00136 //else 00137 { 00138 iter->refuse=(mon*)MAC_REV_REALLOC<mon>((void*)tmp 00139 ,iter->taille2*sizeof(mon) 00140 ,tmptaille*sizeof(mon)); 00141 } 00142 iter->taille2=tmptaille; 00143 } 00144 //on vire des differentes composantes B les monomes de degre>k 00145 //ca ralentit l'algo mais c coherent sinon on cherche des nf 00146 //que l'on ne connait pas 00147 //ya un opti a faire ici 00148 00149 for(iterdump=dump.begin();iterdump!=stockiter/*dump.end()*/ && iterdump->k<k;iterdump++); 00150 // cout<<"je detruit tout a partir du degre "<<k<<endl; 00151 if(iterdump!=stockiter) 00152 stockiter=iterdump++;//on suppose qu'on a fait 00153 if(stockiter!=dump.end()) 00154 free(stockiter->nf); 00155 //un recover avant du meme degre sinon il y a fuite de memoire 00156 00157 if(k==0) {cout<<"pas de sol"<<endl;exit(0);} 00158 //cout<<"iter!=dump.end()"<<(iter!=dump.end())<<endl; 00159 if(0&&iterdump!=dump.end()) 00160 { 00161 for(int i=0;i<iterdump->size;i++) 00162 recall.push_back(iterdump->nf[i]); 00163 iterdump++; 00164 } 00165 for(;iterdump!=dump.end();iterdump++) 00166 { 00167 //destruction de pol de cette couche 00168 //for(int i=0;i<iterdump->size;i++) 00169 // recall.push_back(iterdump->nf[i]); 00170 //recall.push_back(invconv<typename typP::value_type>(iterdump->nf[i])); 00171 { 00172 00173 // cout<<"le pointeur "<<(double*)iterdump->nf[i].nf<<endl; 00174 //Tue Dec 4 00175 //for(int ii=0;ii<(iterdump->size);ii++) 00176 // MAC_REV_FREE<mon>(iterdump->nf[ii].nf 00177 // ,iterdump->nf[ii].size*sizeof(mon)); 00178 //Tue Dec 4 00179 for(int ii=0;ii<(iterdump->size);ii++) 00180 MAC_REV_FREE<coeff>(iterdump->nf[ii].nf 00181 ,iterdump->nf[ii].size*sizeof(coeff)); 00182 MAC_REV_FREE<pol>(iterdump->nf,iterdump->size*sizeof(pol)); 00183 } 00184 //free(iterdump->nf); 00185 } 00186 //cout<<"au tour de B "<<endl; 00187 dump.erase(stockiter,dump.end()); 00188 00189 }
void recover | ( | typPk & | Pk, | |
typMk & | Mk, | |||
const typdump & | dump, | |||
int | k | |||
) | [inline] |
Definition at line 192 of file dump.cc.
Referenced by algo(), NewCrochetchoix(), and newPkMkMatrixof().
00193 { 00194 typedef typename typPk::value_type pol; 00195 typename typdump::const_iterator iter; 00196 typedef typename pol::coeff_t coeff; 00197 //if (k!=Pk.front().GetDegree()) 00198 { 00199 //les mecs dans Pkont ete dumpe normalment donc il faut pas les detruire 00200 //sinon on est embette par forget qui va chercher a la faire aussi 00201 Pk.erase(Pk.begin(),Pk.end()); 00202 Mk.erase(Mk.begin(),Mk.end()); 00203 for(iter=dump.begin();(iter!=dump.end())&&(iter->k<k);iter++); 00204 // if (iter!=dump.end()) cout<<"iter->k "<<iter->k<<endl; 00205 if ((iter!=dump.end())&&(iter->k==k)) 00206 for(int i=0;i<iter->size;i++) 00207 { 00208 //Tue Dec 4 16:12:10 MET 2001 00209 // pol tmppol; 00210 //densify(iter->nf[i],tmppol); 00211 //Pk.push_back(tmppol); 00212 //Tue Dec 4 16:12:10 MET 2001 00213 Pk.push_back(iter->nf[i]); 00214 Mk.push_back(Pk.rbegin()->ind); 00215 } 00216 } 00217 return; 00218 }
void sparsify | ( | const poldense & | p, | |
polsparse & | res | |||
) | [inline] |
Definition at line 10 of file dump.cc.
References int2mon(), and Iszero().
00011 { 00012 typedef typename poldense::monom_t mon; 00013 mon tmpmon; 00014 int comp=0; 00015 res.ind=p.ind; 00016 res.size=0; 00017 for(int i=0;i<p.size;i++) 00018 if(!Iszero(p.nf[i])) res.size++; 00019 res.nf=(mon*)MAC_REV_MALLOC<mon>(res.size*sizeof(mon)); 00020 for(int i=0;i<p.size;i++) 00021 if(!Iszero(p.nf[i])) 00022 { 00023 int2mon(i,tmpmon); 00024 tmpmon.SetCoeff(p.nf[i]); 00025 res.nf[comp++]=tmpmon; 00026 } 00027 }