38 #include "scip/scip.h" 39 #include "scip/type_misc.h" 48 SCIP_HASHMAP* sciptosdp;
59 assert ( scip != NULL );
60 assert ( varmapper != NULL );
63 SCIP_CALL( SCIPallocBlockMemory(scip, varmapper) );
64 (*varmapper)->nvars = 0;
65 (*varmapper)->sdptoscip = NULL;
69 SCIPdebugMsg(scip,
"SCIPsdpVarmapperCreate called for size 0!\n");
74 SCIP_CALL( SCIPhashmapCreate(&((*varmapper)->sciptosdp), SCIPblkmem(scip), size) );
87 SCIPdebugMsg(scip,
"Freeing SdpVarmapper \n");
89 assert ( scip != NULL );
90 assert ( varmapper != NULL );
93 for (i = 0; i < (*varmapper)->nvars; i++)
95 SCIP_CALL( SCIPreleaseVar(scip, &((*varmapper)->sdptoscip[i])) );
98 if ( (*varmapper)->nvars )
99 SCIPhashmapFree(&((*varmapper)->sciptosdp));
101 SCIPfreeBlockMemoryArrayNull(scip, &(*varmapper)->sdptoscip, (*varmapper)->nvars);
102 SCIPfreeBlockMemory(scip, varmapper);
116 SCIP_Bool reallocneeded;
123 assert ( scip != NULL );
124 assert ( varmapper != NULL );
125 assert ( nvars >= 0 );
126 assert ( vars != NULL );
128 allocsize = varmapper->nvars + nvars;
129 SCIP_CALL( SCIPreallocBlockMemoryArray(scip, &(varmapper->sdptoscip), varmapper->nvars, allocsize) );
131 reallocneeded = FALSE;
133 for (i = 0; i < nvars; i++)
135 if ( ! (SCIPhashmapExists(varmapper->sciptosdp, vars[i])) )
137 varmapper->sdptoscip[varmapper->nvars] = vars[i];
138 #if ( SCIP_VERSION >= 700 || (SCIP_VERSION >= 602 && SCIP_SUBVERSION > 0) ) 139 SCIP_CALL( SCIPhashmapInsertInt(varmapper->sciptosdp, (
void*) vars[i], varmapper->nvars) );
141 SCIP_CALL( SCIPhashmapInsert(varmapper->sciptosdp, (
void*) vars[i], (
void*) (
size_t) varmapper->nvars) );
144 SCIP_CALL( SCIPcaptureVar(scip, vars[i]) );
148 SCIPdebugMsg(scip,
"variable %s was not added to the varmapper as it was already part of it \n", SCIPvarGetName(vars[i]));
149 reallocneeded = TRUE;
155 SCIP_CALL( SCIPreallocBlockMemoryArray(scip, &(varmapper->sdptoscip), allocsize, varmapper->nvars) );
171 assert ( scip != NULL );
172 assert ( varmapper != NULL );
173 assert ( var != NULL );
175 assert ( pos <= varmapper->nvars );
177 if ( ! SCIPhashmapExists(varmapper->sciptosdp, var) )
179 if ( pos == varmapper->nvars )
185 SCIP_CALL( SCIPreallocBlockMemoryArray(scip, &varmapper->sdptoscip, varmapper->nvars, varmapper->nvars + 1) );
188 for (i = varmapper->nvars - 1; i >= pos; i--)
190 varmapper->sdptoscip[i + 1] = varmapper->sdptoscip[i];
191 #if ( SCIP_VERSION >= 700 || (SCIP_VERSION >= 602 && SCIP_SUBVERSION > 0) ) 192 SCIP_CALL( SCIPhashmapSetImageInt(varmapper->sciptosdp, varmapper->sdptoscip[i + 1], i + 1) );
194 SCIP_CALL( SCIPhashmapSetImage(varmapper->sciptosdp, varmapper->sdptoscip[i + 1], (
void*) (
size_t) (i + 1)) );
198 varmapper->sdptoscip[pos] = var;
199 #if ( SCIP_VERSION >= 700 || (SCIP_VERSION >= 602 && SCIP_SUBVERSION > 0) ) 200 SCIP_CALL( SCIPhashmapInsertInt(varmapper->sciptosdp, var, pos) );
202 SCIP_CALL( SCIPhashmapInsert(varmapper->sciptosdp, var, (
void*) (
size_t) pos) );
205 SCIP_CALL( SCIPcaptureVar(scip, var) );
209 SCIPdebugMsg(scip,
"variable %s was not added to the varmapper as it was already part of it.\n", SCIPvarGetName(var));
219 assert ( varmapper != NULL );
221 return varmapper->nvars;
230 assert ( varmapper != NULL );
231 assert ( var != NULL );
233 return SCIPhashmapExists(varmapper->sciptosdp, var);
242 assert ( varmapper != NULL );
243 assert ( var != NULL );
245 #if ( SCIP_VERSION >= 700 || (SCIP_VERSION >= 602 && SCIP_SUBVERSION > 0) ) 246 return SCIPhashmapGetImageInt(varmapper->sciptosdp, (
void*) var);
248 return (
int) (size_t) SCIPhashmapGetImage(varmapper->sciptosdp, (
void*) var);
258 assert ( varmapper != NULL );
259 assert ( 0 <= ind && ind < varmapper->nvars );
261 return varmapper->sdptoscip[ind];
274 assert ( scip != NULL );
275 assert ( varmapper != NULL );
276 assert ( 0 <= ind && ind < varmapper->nvars );
278 var = varmapper->sdptoscip[ind];
280 assert ( SCIPhashmapExists(varmapper->sciptosdp, var) );
282 SCIP_CALL( SCIPhashmapRemove(varmapper->sciptosdp, var) );
283 SCIP_CALL( SCIPreleaseVar(scip, &(varmapper)->sdptoscip[ind]) );
286 for (i = ind + 1; i < varmapper->nvars; i++)
288 varmapper->sdptoscip[i - 1] = varmapper->sdptoscip[i];
289 #if ( SCIP_VERSION >= 700 || (SCIP_VERSION >= 602 && SCIP_SUBVERSION > 0) ) 290 SCIP_CALL( SCIPhashmapSetImageInt(varmapper->sciptosdp, varmapper->sdptoscip[i - 1], i - 1) );
292 SCIP_CALL( SCIPhashmapSetImage(varmapper->sciptosdp, varmapper->sdptoscip[i - 1], (
void*) (
size_t) (i - 1)) );
297 SCIP_CALL( SCIPreallocBlockMemoryArray(scip, &varmapper->sdptoscip, varmapper->nvars, varmapper->nvars - 1) );
313 assert ( scip != NULL );
314 assert ( varmapper != NULL );
316 for (k = 0; k < varmapper->nvars; ++k)
318 SCIP_CALL( SCIPgetTransformedVar(scip, varmapper->sdptoscip[k], &var) );
319 SCIP_CALL( SCIPcaptureVar(scip, var) );
321 SCIP_CALL( SCIPhashmapRemove(varmapper->sciptosdp, varmapper->sdptoscip[k]) );
322 #if ( SCIP_VERSION >= 700 || (SCIP_VERSION >= 602 && SCIP_SUBVERSION > 0) ) 323 SCIP_CALL( SCIPhashmapInsertInt(varmapper->sciptosdp, var, k) );
325 SCIP_CALL( SCIPhashmapInsert(varmapper->sciptosdp, var, (
void*) (
size_t) k) );
327 SCIP_CALL( SCIPreleaseVar(scip, &varmapper->sdptoscip[k]) );
329 varmapper->sdptoscip[k] = var;
345 nvars = oldmapper->nvars;
347 newmapper->nvars = nvars;
350 SCIP_CALL( SCIPallocBlockMemory(scip, &newmapper) );
351 SCIP_CALL( SCIPallocBlockMemoryArray(scip, &newmapper->sdptoscip, nvars) );
354 for (i = 0; i < nvars; i++)
356 newmapper->sdptoscip[i] = oldmapper->sdptoscip[i];
357 #if ( SCIP_VERSION >= 700 || (SCIP_VERSION >= 602 && SCIP_SUBVERSION > 0) ) 358 SCIP_CALL( SCIPhashmapInsertInt(newmapper->sciptosdp, oldmapper->sdptoscip[i], i) );
360 SCIP_CALL( SCIPhashmapInsert(newmapper->sciptosdp, oldmapper->sdptoscip[i], (
void*) (
size_t) i) );
362 SCIP_CALL( SCIPcaptureVar(scip, newmapper->sdptoscip[i]) );
SCIP_RETCODE SCIPsdpVarmapperAddVars(SCIP *scip, SdpVarmapper *varmapper, int nvars, SCIP_VAR **vars)
SCIP_Bool SCIPsdpVarmapperExistsSCIPvar(SdpVarmapper *varmapper, SCIP_VAR *var)
SCIP_RETCODE SCIPsdpVarmapperClone(SCIP *scip, SdpVarmapper *oldmapper, SdpVarmapper *newmapper)
SCIP_VAR * SCIPsdpVarmapperGetSCIPvar(SdpVarmapper *varmapper, int ind)
int SCIPsdpVarmapperGetNVars(SdpVarmapper *varmapper)
SCIP_RETCODE SCIPsdpVarmapperCreate(SCIP *scip, SdpVarmapper **varmapper, int size)
struct Sdpvarmapper SdpVarmapper
int SCIPsdpVarmapperGetSdpIndex(SdpVarmapper *varmapper, SCIP_VAR *var)
maps SCIP variables to SDP indices (the SCIP variables are given SDP indices in the order in which th...
SCIP_RETCODE SCIPsdpVarmapperTransform(SCIP *scip, SdpVarmapper *varmapper)
SCIP_RETCODE SCIPsdpVarmapperInsertVar(SCIP *scip, SdpVarmapper *varmapper, SCIP_VAR *var, int pos)
SCIP_RETCODE SCIPsdpVarmapperFree(SCIP *scip, SdpVarmapper **varmapper)
SCIP_RETCODE SCIPsdpVarmapperRemoveSdpIndex(SCIP *scip, SdpVarmapper *varmapper, int ind)