/* * Revision Control Information * * $Source: /vol/opua/opua2/sis/sis-1.1/common/src/sis/node/RCS/cubehack.c,v $ * $Author: sis $ * $Revision: 1.2 $ * $Date: 1992/05/06 18:57:41 $ * */ /* #include "sis.h" #include "node_int.h" #ifdef lint struct cube_struct cube; bool summary; bool trace; bool remove_essential; bool force_irredundant; bool unwrap_onset; bool single_expand; bool pos; bool recompute_onset; bool use_super_gasp; bool use_random_order; #endif */ #include "espresso.h" ABC_NAMESPACE_IMPL_START void cautious_define_cube_size(n) int n; { if (cube.fullset != 0 && cube.num_binary_vars == n) return; if (cube.fullset != 0) { setdown_cube(); FREE(cube.part_size); } cube.num_binary_vars = cube.num_vars = n; cube.part_size = ALLOC(int, n); cube_setup(); } void define_cube_size(n) int n; { register int q, i; static int called_before = 0; /* check if the cube is already just the right size */ if (cube.fullset != 0 && cube.num_binary_vars == n && cube.num_vars == n) return; /* We can't handle more than 100 inputs */ if (n > 100) { cautious_define_cube_size(n); called_before = 0; return; } if (cube.fullset == 0 || ! called_before) { cautious_define_cube_size(100); called_before = 1; } cube.num_vars = n; cube.num_binary_vars = n; cube.num_mv_vars = 0; cube.output = -1; cube.size = n * 2; /* first_part, last_part, first_word, last_word, part_size OKAY */ /* cube.sparse is OKAY */ /* need to completely re-make cube.fullset and cube.binary_mask */ (void) set_fill(cube.fullset, n*2); (void) set_fill(cube.binary_mask, n*2); /* need to resize each set in cube.var_mask and cube.temp */ q = cube.fullset[0]; for(i = 0; i < cube.num_vars; i++) cube.var_mask[i][0] = q; for(i = 0; i < CUBE_TEMP; i++) cube.temp[i][0] = q; /* need to resize cube.emptyset and cube.mv_mask */ cube.emptyset[0] = q; cube.mv_mask[0] = q; /* need to reset the inword and inmask */ if (cube.num_binary_vars != 0) { cube.inword = cube.last_word[cube.num_binary_vars - 1]; cube.inmask = cube.binary_mask[cube.inword] & DISJOINT; } else { cube.inword = -1; cube.inmask = 0; } /* cdata (entire structure) is OKAY */ } void undefine_cube_size() { if (cube.num_binary_vars > 100) { if (cube.fullset != 0) { setdown_cube(); FREE(cube.part_size); } } else { cube.num_vars = cube.num_binary_vars = 100; if (cube.fullset != 0) { setdown_cube(); FREE(cube.part_size); } } } void set_espresso_flags() { summary = FALSE; trace = FALSE; remove_essential = TRUE; force_irredundant = TRUE; unwrap_onset = TRUE; single_expand = FALSE; pos = FALSE; recompute_onset = FALSE; use_super_gasp = FALSE; use_random_order = FALSE; } ABC_NAMESPACE_IMPL_END