9 template<
typename poldense,
typename polsparse>
10 void sparsify(
const poldense &p, polsparse & res)
12 typedef typename poldense::monom_t
mon;
17 for(
int i=0;
i<p.size;
i++)
18 if(!
Iszero(p.nf[
i])) res.size++;
19 res.nf=(mon*)MAC_REV_MALLOC<mon>(res.size*
sizeof(mon));
20 for(
int i=0;
i<p.size;
i++)
25 res.nf[comp++]=tmpmon;
29 template<
typename poldense,
typename polsparse>
30 void densify(
const polsparse & p, poldense &res)
32 typedef typename poldense::coeff_t coeff;
35 for(
int i=0;
i<p.size;
i++)
38 res.nf=(coeff*)MAC_REV_MALLOC<coeff>(res.size*
sizeof(coeff));
39 for(
int i=0;
i<res.size;
i++)
41 for(
int i=0;
i<p.size;
i++)
43 res.nf[
mon2int(p.nf[
i])]=p.nf[
i].GetCoeff();
47 template<
typename typPk,
typename typdump>
48 void Dump(
const typPk & Pk ,typdump &dump)
50 typedef typename typdump::value_type
dumpstruct;
55 next.
k=Pk.front().ind.GetDegree();
60 for(
typename typPk::const_iterator iter=Pk.begin();iter!=Pk.end();iter++,i++)
74 template<
typename Base,
typename typdump,
typename typrecall>
82 typedef typename typdump::value_type::pol_t
pol;
83 typename typdump::iterator iterdump=dump.begin(),stockiter=dump.end();
88 for(
typename typrecall::iterator iter=recall.begin();iter!=recall.end();iter++)
89 MAC_REV_FREE<coeff>(iter->nf,iter->size*
sizeof(coeff));
90 recall.erase(recall.begin(),recall.end());
94 mon *tmp=(mon*)MAC_REV_MALLOC<mon>(iter->taille1*
sizeof(mon));
96 for(
int i=0;
i<iter->taille1;
i++)
97 if(iter->accept[
i].GetDegree()<=
k)
100 tmp[tmptaille++]=iter->accept[
i];
106 MAC_REV_FREE<mon>(tmp,iter->taille1*
sizeof(
mon));
107 MAC_REV_FREE<mon>(iter->accept,iter->taille1*
sizeof(
mon));
108 MAC_REV_FREE<mon>(iter->refuse,iter->taille2*
sizeof(
mon));
113 MAC_REV_FREE<mon>(iter->accept,iter->taille1*
sizeof(
mon));
114 iter->accept=(mon*)MAC_REV_REALLOC<mon>((
void*)tmp
115 ,iter->taille1*
sizeof(
mon)
116 ,tmptaille*
sizeof(mon));
117 iter->taille1=tmptaille;
119 tmp=(mon*)MAC_REV_MALLOC<mon>(iter->taille2*
sizeof(mon));
121 for(
int i=0;
i<iter->taille2;
i++)
122 if(iter->refuse[
i].GetDegree()<=
k)
125 tmp[tmptaille++]=iter->refuse[
i];
129 MAC_REV_FREE<mon>(iter->refuse,iter->taille2*
sizeof(
mon));
138 iter->refuse=(mon*)MAC_REV_REALLOC<mon>((
void*)tmp
139 ,iter->taille2*
sizeof(
mon)
140 ,tmptaille*
sizeof(mon));
142 iter->taille2=tmptaille;
149 for(iterdump=dump.begin();iterdump!=stockiter && iterdump->k<
k;iterdump++);
151 if(iterdump!=stockiter)
152 stockiter=iterdump++;
153 if(stockiter!=dump.end())
157 if(k==0) {cout<<
"pas de sol"<<endl;exit(0);}
159 if(0&&iterdump!=dump.end())
161 for(
int i=0;
i<iterdump->size;
i++)
162 recall.push_back(iterdump->nf[
i]);
165 for(;iterdump!=dump.end();iterdump++)
179 for(
int ii=0;ii<(iterdump->size);ii++)
180 MAC_REV_FREE<coeff>(iterdump->nf[ii].nf
181 ,iterdump->nf[ii].size*
sizeof(coeff));
182 MAC_REV_FREE<pol>(iterdump->nf,iterdump->size*
sizeof(
pol));
187 dump.erase(stockiter,dump.end());
191 template<
typename typPk,
typename typMk,
typename typdump>
192 void recover(typPk &Pk,typMk &Mk,
const typdump & dump,
int k)
194 typedef typename typPk::value_type
pol;
195 typename typdump::const_iterator iter;
201 Pk.erase(Pk.begin(),Pk.end());
202 Mk.erase(Mk.begin(),Mk.end());
203 for(iter=dump.begin();(iter!=dump.end())&&(iter->k<k);iter++);
205 if ((iter!=dump.end())&&(iter->k==k))
206 for(
int i=0;
i<iter->size;
i++)
213 Pk.push_back(iter->nf[
i]);
214 Mk.push_back(Pk.rbegin()->ind);
int size
Definition: dump.hpp:6
pol pol_t
Definition: dump.hpp:4
list< predicat >::iterator iterator
Definition: types.hpp:20
int k
Definition: dump.hpp:5
void recover(typPk &Pk, typMk &Mk, const typdump &dump, int k)
Definition: dump.hpp:192
void Dump(const typPk &Pk, typdump &dump)
Definition: dump.hpp:48
T coeff_t
Definition: pol.hpp:9
int mon2int(const mon &mm)
Definition: placemon.hpp:294
void int2mon(const int &i, mon &res)
Definition: placemon.hpp:288
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 Iszero(const Scl< MPQ > &c)
Definition: Iszero.hpp:14
void sparsify(const poldense &p, polsparse &res)
Definition: dump.hpp:10
void forget(Base &b, typdump &dump, int k, typrecall &recall)
Definition: dump.hpp:75
pol * nf
Definition: dump.hpp:7
iterator begin()
Definition: types.hpp:25
void densify(const polsparse &p, poldense &res)
Definition: dump.hpp:30
predicat::monom_t mon
Definition: types.hpp:19
#define pol
Definition: pol2ter.hpp:3
void SetCoeff(const C &c)
Definition: Monom.hpp:68
mon ind
Definition: pol.hpp:11
iterator erase(iterator first, iterator last)
Definition: types.hpp:35