| #include "vtr_assert.h" |
| #include "cube.h" |
| #include "bdd.h" |
| |
| /* set_clear -- make "r" the empty set of "size" elements */ |
| /* |
| pset set_clear(r, size) |
| pset r; |
| int size; |
| { |
| 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; |
| |
| VTR_ASSERT(cube != NULL); |
| VTR_ASSERT(cube->num_literals > 0); |
| |
| cube_copy = (ace_cube_t*) 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 = (ace_cube_t*) 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) { |
| VTR_ASSERT(cube != NULL); |
| VTR_ASSERT(cube->cube != NULL); |
| free(cube->cube); |
| free(cube); |
| } |