71 lines
1.6 KiB
C
71 lines
1.6 KiB
C
|
#include "cube.h"
|
||
|
#include "bdd.h"
|
||
|
|
||
|
/* set_clear -- make "r" the empty set of "size" elements */
|
||
|
/*
|
||
|
pset set_clear(r, size)
|
||
|
register pset r;
|
||
|
int size;
|
||
|
{
|
||
|
register int i = LOOPINIT(size);
|
||
|
*r = i; do r[i] = 0; while (--i > 0);
|
||
|
return r;
|
||
|
}*/
|
||
|
|
||
|
ace_cube_t * ace_cube_dup(ace_cube_t * cube) {
|
||
|
int i;
|
||
|
ace_cube_t * cube_copy;
|
||
|
|
||
|
assert(cube != NULL);
|
||
|
assert(cube->num_literals > 0);
|
||
|
|
||
|
cube_copy = malloc(sizeof(ace_cube_t));
|
||
|
cube_copy->static_prob = cube->static_prob;
|
||
|
cube_copy->num_literals = cube->num_literals;
|
||
|
cube_copy->cube = set_new (2 * cube->num_literals);
|
||
|
for (i = 0; i < cube->num_literals; i++) {
|
||
|
switch (node_get_literal (cube->cube, i)) {
|
||
|
case ZERO:
|
||
|
set_insert(cube_copy->cube, 2 * i);
|
||
|
set_remove(cube_copy->cube, 2 * i + 1);
|
||
|
break;
|
||
|
case ONE:
|
||
|
set_remove(cube_copy->cube, 2 * i);
|
||
|
set_insert(cube_copy->cube, 2 * i + 1);
|
||
|
break;
|
||
|
case TWO:
|
||
|
set_insert(cube_copy->cube, 2 * i);
|
||
|
set_insert(cube_copy->cube, 2 * i + 1);
|
||
|
break;
|
||
|
default:
|
||
|
fail("Bad literal.");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return (cube_copy);
|
||
|
}
|
||
|
|
||
|
ace_cube_t * ace_cube_new_dc(int num_literals) {
|
||
|
int i;
|
||
|
ace_cube_t * new_cube;
|
||
|
|
||
|
new_cube = malloc(sizeof(ace_cube_t));
|
||
|
new_cube->num_literals = num_literals;
|
||
|
new_cube->static_prob = 1.0;
|
||
|
new_cube->cube = set_new (2 * num_literals);
|
||
|
|
||
|
for (i = 0; i < num_literals; i++) {
|
||
|
set_insert(new_cube->cube, 2 * i);
|
||
|
set_insert(new_cube->cube, 2 * i + 1);
|
||
|
}
|
||
|
|
||
|
return (new_cube);
|
||
|
}
|
||
|
|
||
|
void ace_cube_free(ace_cube_t * cube) {
|
||
|
assert(cube != NULL);
|
||
|
assert(cube->cube != NULL);
|
||
|
free(cube->cube);
|
||
|
free(cube);
|
||
|
}
|