#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); | |
} |