14 template<
typename typPk,
typename typdump>
15 void Dump(
const typPk & Pk ,typdump &dump)
17 typedef typename typdump::value_type
dumpstruct;
22 next.
k=Pk.front().ind.GetDegree();
29 for(
typename typPk::const_iterator iter=Pk.begin()
30 ;iter!=Pk.end();iter++,i++)
40 template<
typename Base,
typename typdump,
typename typrecall>
48 typedef typename typdump::value_type::pol_t
pol;
49 typename typdump::iterator iterdump=dump.begin(),stockiter=dump.end();
50 for(
typename typrecall::iterator iter=recall.begin()
51 ;iter!=recall.end();iter++)
53 MAC_REV_FREE<coeff>(iter->nf,iter->size*
sizeof(coeff));
54 MAC_REV_FREE<char>(iter->nfind,iter->sizenf);
56 recall.erase(recall.begin(),recall.end());
60 mon *tmp=(mon*)MAC_REV_MALLOC<mon>(iter->taille1*
sizeof(mon));
62 for(
int i=0;
i<iter->taille1;
i++)
63 if(iter->accept[
i].GetDegree()<=
k)
66 tmp[tmptaille++]=iter->accept[
i];
72 MAC_REV_FREE<mon>(tmp,iter->taille1*
sizeof(
mon));
73 MAC_REV_FREE<mon>(iter->accept,iter->taille1*
sizeof(
mon));
74 MAC_REV_FREE<mon>(iter->refuse,iter->taille2*
sizeof(
mon));
79 MAC_REV_FREE<mon>(iter->accept,iter->taille1*
sizeof(
mon));
80 iter->accept=(mon*)MAC_REV_REALLOC<mon>((
void*)tmp
81 ,iter->taille1*
sizeof(
mon)
82 ,tmptaille*
sizeof(mon));
83 iter->taille1=tmptaille;
85 tmp=(mon*)MAC_REV_MALLOC<mon>(iter->taille2*
sizeof(mon));
87 for(
int i=0;
i<iter->taille2;
i++)
91 if((iter->refuse[
i].GetDegree()<=
k))
95 tmp[tmptaille++]=iter->refuse[
i];
99 MAC_REV_FREE<mon>(iter->refuse,iter->taille2*
sizeof(
mon));
108 iter->refuse=(mon*)MAC_REV_REALLOC<mon>((
void*)tmp
109 ,iter->taille2*
sizeof(
mon)
110 ,tmptaille*
sizeof(mon));
112 iter->taille2=tmptaille;
119 for(iterdump=dump.begin();iterdump!=stockiter && iterdump->k<
k;iterdump++);
121 if(iterdump!=stockiter)
122 stockiter=iterdump++;
123 if(stockiter!=dump.end())
127 if(k==0) {cout<<
"pas de sol"<<endl;exit(0);}
130 if(0&&iterdump!=dump.end())
132 for(
int i=0;
i<iterdump->size;
i++)
133 recall.push_back(iterdump->nf[
i]);
137 for(;iterdump!=dump.end();iterdump++)
151 for(
int ii=0;ii<(iterdump->size);ii++)
153 MAC_REV_FREE<coeff>(iterdump->nf[ii].nf
154 ,iterdump->nf[ii].size*
sizeof(coeff));
155 MAC_REV_FREE<char>(iterdump->nf[ii].nfind
156 ,iterdump->nf[ii].sizenf);
158 MAC_REV_FREE<pol>(iterdump->nf,iterdump->size*
sizeof(
pol));
163 dump.erase(stockiter,dump.end());
167 template<
typename typPk,
typename typMk,
typename typdump>
168 void recover(typPk &Pk,typMk &Mk,
const typdump & dump,
int k)
170 typedef typename typPk::value_type
pol;
171 typename typdump::const_iterator iter;
177 Pk.erase(Pk.begin(),Pk.end());
178 Mk.erase(Mk.begin(),Mk.end());
179 for(iter=dump.begin();(iter!=dump.end())&&(iter->k<k);iter++);
181 if ((iter!=dump.end())&&(iter->k==k))
182 for(
int i=0;
i<iter->size;
i++)
189 Pk.push_back(iter->nf[
i]);
190 Mk.push_back(Pk.rbegin()->ind);
196 template<
typename Base,
typename typdump,
typename typrecall>
204 typedef typename typdump::value_type::pol_t
pol;
205 typename typdump::iterator iterdump=dump.begin(),stockiter=dump.end();
206 for(
typename typrecall::iterator iter=recall.begin()
207 ;iter!=recall.end();iter++)
209 MAC_REV_FREE<coeff>(iter->nf,iter->size*
sizeof(coeff));
210 MAC_REV_FREE<char>(iter->nfind,iter->sizenf);
212 recall.erase(recall.begin(),recall.end());
216 mon *tmp=(mon*)MAC_REV_MALLOC<mon>(iter->taille1*
sizeof(mon));
218 for(
int i=0;
i<iter->taille1;
i++)
219 if(iter->accept[
i].GetDegree()<=
k)
222 tmp[tmptaille++]=iter->accept[
i];
228 MAC_REV_FREE<mon>(tmp,iter->taille1*
sizeof(
mon));
229 MAC_REV_FREE<mon>(iter->accept,iter->taille1*
sizeof(
mon));
230 MAC_REV_FREE<mon>(iter->refuse,iter->taille2*
sizeof(
mon));
235 MAC_REV_FREE<mon>(iter->accept,iter->taille1*
sizeof(
mon));
236 iter->accept=(mon*)MAC_REV_REALLOC<mon>((
void*)tmp
237 ,iter->taille1*
sizeof(
mon)
238 ,tmptaille*
sizeof(mon));
239 iter->taille1=tmptaille;
241 tmp=(mon*)MAC_REV_MALLOC<mon>(iter->taille2*
sizeof(mon));
243 for(
int i=0;
i<iter->taille2;
i++)
247 if((iter->refuse[
i].GetDegree()<=
k))
251 tmp[tmptaille++]=iter->refuse[
i];
255 MAC_REV_FREE<mon>(iter->refuse,iter->taille2*
sizeof(
mon));
264 iter->refuse=(mon*)MAC_REV_REALLOC<mon>((
void*)tmp
265 ,iter->taille2*
sizeof(
mon)
266 ,tmptaille*
sizeof(mon));
268 iter->taille2=tmptaille;
275 for(iterdump=dump.begin();iterdump!=stockiter && iterdump->k<
k;iterdump++);
277 if(iterdump!=stockiter)
278 stockiter=iterdump++;
279 if(stockiter!=dump.end())
286 if(0&&iterdump!=dump.end())
288 for(
int i=0;
i<iterdump->size;
i++)
289 recall.push_back(iterdump->nf[
i]);
293 for(;iterdump!=dump.end();iterdump++)
307 for(
int ii=0;ii<(iterdump->size);ii++)
309 MAC_REV_FREE<coeff>(iterdump->nf[ii].nf
310 ,iterdump->nf[ii].size*
sizeof(coeff));
311 MAC_REV_FREE<char>(iterdump->nf[ii].nfind
312 ,iterdump->nf[ii].sizenf);
314 MAC_REV_FREE<pol>(iterdump->nf,iterdump->size*
sizeof(
pol));
319 dump.erase(stockiter,dump.end());
324 #endif // ALREADY_dump3
void recover(typPk &Pk, typMk &Mk, const typdump &dump, int k)
Definition: dump3sdp.hpp:168
void forget(Base &b, typdump &dump, int k, typrecall &recall)
Definition: dump3sdp.hpp:41
int size
Definition: dump.hpp:6
pol pol_t
Definition: dump3sdp.hpp:6
void forget0(Base &b, typdump &dump, int k, typrecall &recall)
Definition: dump3sdp.hpp:197
list< predicat >::iterator iterator
Definition: types.hpp:20
int k
Definition: dump.hpp:5
void Dump(const typPk &Pk, typdump &dump)
Definition: dump3sdp.hpp:15
T coeff_t
Definition: pol.hpp:9
MSKint32t k
Definition: mosek.h:2713
C coeff_t
Definition: Monom.hpp:26
void * MAC_REV_MALLOC(int size)
Definition: memory.hpp:39
iterator end()
Definition: types.hpp:30
Mon mon
Definition: solver_bb_floating.cpp:136
MSKint32t MSKint32t MSKint32t i
Definition: mosek.h:2278
int sizemonquo
Definition: dump3sdp.hpp:11
pol * nf
Definition: dump.hpp:7
iterator begin()
Definition: types.hpp:25
predicat::monom_t mon
Definition: types.hpp:19
#define pol
Definition: pol2ter.hpp:3
mon * monquo
Definition: dump3sdp.hpp:10
void SetCoeff(const C &c)
Definition: Monom.hpp:68
mon ind
Definition: pol.hpp:11
Multivariate monomials.
Definition: Monom.hpp:21
iterator erase(iterator first, iterator last)
Definition: types.hpp:35