59 pcube RAISE, FREESET, INIT_LOWER, SUPER_CUBE, OVEREXPANDED_CUBE;
78 for(var = 0; var <
cube.num_vars; var++)
80 (void)
set_or(INIT_LOWER, INIT_LOWER,
cube.var_mask[var]);
94 expand1(R, F, RAISE, FREESET, OVEREXPANDED_CUBE, SUPER_CUBE,
95 INIT_LOWER, &num_covered,
p);
97 printf(
"EXPAND: %s (covered %d)\n",
pc1(
p), num_covered);
103 if (num_covered == 0 && !
setp_equal(
p, OVEREXPANDED_CUBE)) {
135void expand1(BB, CC, RAISE, FREESET, OVEREXPANDED_CUBE, SUPER_CUBE,
136 INIT_LOWER, num_covered, c)
141pcube OVEREXPANDED_CUBE;
150 printf(
"\nEXPAND1: \t%s\n",
pc1(c));
166 (void)
set_diff(FREESET, FREESET, INIT_LOWER);
172 (void)
set_or(OVEREXPANDED_CUBE, RAISE, FREESET);
175 if (CC->active_count > 0) {
180 while (CC->active_count > 0) {
189 while (BB->active_count > 0) {
190 mincov(BB, RAISE, FREESET);
194 (void)
set_or(RAISE, RAISE, FREESET);
406pcube RAISE, FREESET, SUPER_CUBE;
410 register pcube bestfeas = NULL;
411 register pcube *feas;
413 pcube *feas_new_lower;
414 int bestcount, bestsize, count, size, numfeas, lastfeas;
426 feas_new_lower =
ALLOC(
pcube, CC->active_count);
428 for(i = 0; i < numfeas; i++)
429 feas_new_lower[i] =
GETSET(new_lower, i);
441 for(i = 0; i < lastfeas; i++) {
453 (void)
set_or(SUPER_CUBE, SUPER_CUBE,
p);
465 printf(
"SELECT_FEASIBLE: started with %d pfcc, ended with %d fcc\n",
471 FREE(feas_new_lower);
479 for(i = 0; i < numfeas; i++) {
485 for(j = 0; j < numfeas; j++)
489 for(j = 0; j < numfeas; j++)
493 if (count > bestcount) {
497 }
else if (count == bestcount && size < bestsize) {
504 (void)
set_or(RAISE, RAISE, bestfeas);
505 (void)
set_diff(FREESET, FREESET, RAISE);
507 printf(
"FEASIBLE: \tRAISE=%s FREESET=%s\n",
pc1(RAISE),
pc2(FREESET));
564 int expansion, nset, var, dist;
566 register pcube xraise=
cube.temp[0], xlower,
p, last, plower;
569#if defined(_POSIX_SOURCE) || defined(__SVR4)
570 dist = rand() %
set_ord(FREESET);
574 for(var = 0; var <
cube.size && dist >= 0; var++) {
596 for(var =
cube.num_binary_vars; var <
cube.num_vars; var++) {
599 if (expansion > 500)
goto heuristic_mincov;
603 if (nset > 500)
goto heuristic_mincov;
612 BB->active_count = 0;
614 printf(
"MINCOV: \tRAISE=%s FREESET=%s\n",
pc1(RAISE),
pc2(FREESET));
624 (void)
set_diff(FREESET, FREESET, RAISE);