84 static char rcsid[]
DD_UNUSED =
"$Id: cuddWindow.c,v 1.15 2012/02/05 01:07:19 fabio Exp $";
89 extern int ddTotalNISwaps;
168 if (table->
keys - table->
isolated != (
unsigned) supposedOpt) {
169 (void) fprintf(table->
err,
"Convergence failed! (%d != %d)\n",
179 if (table->
keys - table->
isolated != (
unsigned) supposedOpt) {
180 (void) fprintf(table->
err,
"Convergence failed! (%d != %d)\n",
221 assert(low >= 0 && high < table->size);
224 if (high-low < 1)
return(0);
227 for (x = low; x < high; x++) {
230 if (res == 0)
return(0);
233 if (res == 0)
return(0);
237 (void) fprintf(table->
out,
"-");
239 (void) fprintf(table->
out,
"=");
277 assert(low >= 0 && high < table->size);
283 events =
ALLOC(
int,nwin);
284 if (events == NULL) {
288 for (x=0; x<nwin; x++) {
295 for (x=0; x<nwin; x++) {
311 if (x < nwin-1) events[x+1] = 1;
312 if (x > 0) events[x-1] = 1;
318 (void) fprintf(table->
out,
"-");
320 (void) fprintf(table->
out,
"=");
328 (void) fprintf(table->
out,
"|");
382 if (sizeNew < size) {
383 if (sizeNew == 0)
return(0);
389 if (sizeNew < size) {
390 if (sizeNew == 0)
return(0);
396 if (sizeNew < size) {
397 if (sizeNew == 0)
return(0);
403 if (sizeNew < size) {
404 if (sizeNew == 0)
return(0);
410 if (sizeNew < size) {
411 if (sizeNew == 0)
return(0);
462 assert(low >= 0 && high < table->size);
465 if (high-low < 2)
return(
ddWindow2(table,low,high));
467 for (x = low; x+1 < high; x++) {
469 if (res == 0)
return(0);
472 (void) fprintf(table->
out,
"=");
474 (void) fprintf(table->
out,
"-");
511 assert(low >= 0 && high < table->size);
517 events =
ALLOC(
int,nwin);
518 if (events == NULL) {
522 for (x=0; x<nwin; x++) {
528 for (x=0; x<nwin; x++) {
535 if (x < nwin-1) events[x+1] = 1;
536 if (x > 1) events[x-2] = 1;
542 if (x < nwin-2) events[x+2] = 1;
543 if (x < nwin-1) events[x+1] = 1;
544 if (x > 0) events[x-1] = 1;
545 if (x > 1) events[x-2] = 1;
549 if (x < nwin-2) events[x+2] = 1;
550 if (x > 0) events[x-1] = 1;
560 (void) fprintf(table->
out,
"=");
562 (void) fprintf(table->
out,
"-");
570 (void) fprintf(table->
out,
"|");
611 x = w+1; y = x+1; z = y+1;
631 if (sizeNew < size) {
632 if (sizeNew == 0)
return(0);
638 if (sizeNew < size) {
639 if (sizeNew == 0)
return(0);
645 if (sizeNew < size || (sizeNew == size &&
ABDC < best)) {
646 if (sizeNew == 0)
return(0);
652 if (sizeNew < size) {
653 if (sizeNew == 0)
return(0);
659 if (sizeNew < size || (sizeNew == size &&
ADCB < best)) {
660 if (sizeNew == 0)
return(0);
666 if (sizeNew < size) {
667 if (sizeNew == 0)
return(0);
673 if (sizeNew < size) {
674 if (sizeNew == 0)
return(0);
680 if (sizeNew < size) {
681 if (sizeNew == 0)
return(0);
687 if (sizeNew < size || (sizeNew == size &&
BDAC < best)) {
688 if (sizeNew == 0)
return(0);
694 if (sizeNew < size || (sizeNew == size &&
BDCA < best)) {
695 if (sizeNew == 0)
return(0);
701 if (sizeNew < size) {
702 if (sizeNew == 0)
return(0);
708 if (sizeNew < size || (sizeNew == size &&
DCBA < best)) {
709 if (sizeNew == 0)
return(0);
715 if (sizeNew < size || (sizeNew == size &&
DCAB < best)) {
716 if (sizeNew == 0)
return(0);
722 if (sizeNew < size || (sizeNew == size &&
CDAB < best)) {
723 if (sizeNew == 0)
return(0);
729 if (sizeNew < size || (sizeNew == size &&
CDBA < best)) {
730 if (sizeNew == 0)
return(0);
736 if (sizeNew < size || (sizeNew == size &&
CBDA < best)) {
737 if (sizeNew == 0)
return(0);
743 if (sizeNew < size || (sizeNew == size &&
BCDA < best)) {
744 if (sizeNew == 0)
return(0);
750 if (sizeNew < size || (sizeNew == size &&
BCAD < best)) {
751 if (sizeNew == 0)
return(0);
757 if (sizeNew < size || (sizeNew == size &&
CBAD < best)) {
758 if (sizeNew == 0)
return(0);
764 if (sizeNew < size || (sizeNew == size &&
CABD < best)) {
765 if (sizeNew == 0)
return(0);
771 if (sizeNew < size || (sizeNew == size &&
CADB < best)) {
772 if (sizeNew == 0)
return(0);
778 if (sizeNew < size || (sizeNew == size &&
ACDB < best)) {
779 if (sizeNew == 0)
return(0);
785 if (sizeNew < size || (sizeNew == size &&
ACBD < best)) {
786 if (sizeNew == 0)
return(0);
863 assert(low >= 0 && high < table->size);
866 if (high-low < 3)
return(
ddWindow3(table,low,high));
868 for (w = low; w+2 < high; w++) {
870 if (res == 0)
return(0);
873 (void) fprintf(table->
out,
"=");
875 (void) fprintf(table->
out,
"-");
912 assert(low >= 0 && high < table->size);
918 events =
ALLOC(
int,nwin);
919 if (events == NULL) {
923 for (x=0; x<nwin; x++) {
929 for (x=0; x<nwin; x++) {
936 if (x < nwin-1) events[x+1] = 1;
937 if (x > 2) events[x-3] = 1;
941 if (x < nwin-3) events[x+3] = 1;
942 if (x < nwin-1) events[x+1] = 1;
943 if (x > 0) events[x-1] = 1;
944 if (x > 2) events[x-3] = 1;
948 if (x < nwin-3) events[x+3] = 1;
949 if (x > 0) events[x-1] = 1;
955 if (x < nwin-3) events[x+3] = 1;
956 if (x < nwin-2) events[x+2] = 1;
957 if (x > 0) events[x-1] = 1;
958 if (x > 1) events[x-2] = 1;
974 if (x < nwin-3) events[x+3] = 1;
975 if (x < nwin-2) events[x+2] = 1;
976 if (x < nwin-1) events[x+1] = 1;
977 if (x > 0) events[x-1] = 1;
978 if (x > 1) events[x-2] = 1;
979 if (x > 2) events[x-3] = 1;
985 if (x < nwin-2) events[x+2] = 1;
986 if (x < nwin-1) events[x+1] = 1;
987 if (x > 1) events[x-2] = 1;
988 if (x > 2) events[x-3] = 1;
992 if (x < nwin-2) events[x+2] = 1;
993 if (x > 1) events[x-2] = 1;
1003 (void) fprintf(table->
out,
"=");
1005 (void) fprintf(table->
out,
"-");
1013 (void) fprintf(table->
out,
"|");
static int ddPermuteWindow3(DdManager *table, int x)
static int ddWindow2(DdManager *table, int low, int high)
static int ddWindow4(DdManager *table, int low, int high)
static int ddWindow3(DdManager *table, int low, int high)
static int ddWindowConv2(DdManager *table, int low, int high)
static int ddWindowConv4(DdManager *table, int low, int high)
static int ddPermuteWindow4(DdManager *table, int w)
int cuddWindowReorder(DdManager *table, int low, int high, Cudd_ReorderingType submethod)
int ddTotalNumberSwapping
int cuddSwapInPlace(DdManager *table, int x, int y)
static int ddWindowConv3(DdManager *table, int low, int high)
static char rcsid [] DD_UNUSED