pcover expand(pset_family F, pset_family R, int nonsparse) /* expand non-sparse variables only */ { register pcube last, p; pcube RAISE, FREESET, INIT_LOWER, SUPER_CUBE, OVEREXPANDED_CUBE; int var, num_covered; bool change; /* Order the cubes according to "chewing-away from the edges" of mini */ if (use_random_order) F = random_order(F); else F = mini_sort(F, (qsort_compare_func) ascend); /* Allocate memory for variables needed by expand1() */ RAISE = new_cube(); FREESET = new_cube(); INIT_LOWER = new_cube(); SUPER_CUBE = new_cube(); OVEREXPANDED_CUBE = new_cube(); /* Setup the initial lowering set (differs only for nonsparse) */ if (nonsparse) for(var = 0; var < cube.num_vars; var++) if (cube.sparse[var]) (void) set_or(INIT_LOWER, INIT_LOWER, cube.var_mask[var]); /* Mark all cubes as not covered, and maybe essential */ foreach_set(F, last, p) { RESET(p, COVERED); RESET(p, NONESSEN); }
pcover reduce(pset_family F, pset_family D) { register pcube last, p, cunder, *FD; /* Order the cubes */ if (use_random_order) F = random_order(F); else { F = toggle ? sort_reduce(F) : mini_sort(F, (qsort_compare_func) descend); toggle = ! toggle; } /* Try to reduce each cube */ FD = cube2list(F, D); foreach_set(F, last, p) { cunder = reduce_cube(FD, p); /* reduce the cube */ if (setp_equal(cunder, p)) { /* see if it actually did */ SET(p, ACTIVE); /* cube remains active */ SET(p, PRIME); /* cube remains prime ? */ } else { if (debug & REDUCE) { printf("REDUCE: %s to %s %s\n", pc1(p), pc2(cunder), print_time(ptime())); } set_copy(p, cunder); /* save reduced version */ RESET(p, PRIME); /* cube is no longer prime */ if (setp_empty(cunder)) RESET(p, ACTIVE); /* if null, kill the cube */ else SET(p, ACTIVE); /* cube is active */ } free_cube(cunder); }
void sort_parser(t_all *all) { if (all->nb_arg <= 6) { mini_sort(all); write(1, "\n", 1); } else { medium_sort(all); write(1, "\n", 1); } if (all->opt->v && all->nb_arg > 6 && all->nb_arg < 42) display_pile(all); }