51 DdNode * bFuncRes = NULL;
54 if ( Cudd_IsConstant(bFunc) )
59 p->nSupp = Cudd_SupportSize( dd, bFunc );
64 for ( i = 0; i <
p->nSupp; i++ )
67 p->pMapToPlanes[ dd->invperm[i] ] = i;
68 p->pMapToDdVarsFinal[i] = dd->invperm[i];
82 for ( i = 0; i <
p->nSupp; i++ )
84 if (
p->pOrderInt[i] == pPerm[i] )
87 for ( k = i + 1; k <
p->nSupp; k++ )
88 if ( pPerm[i] ==
p->pOrderInt[k] )
92 printf(
"reoShuffle() Error: Cannot find a variable.\n" );
96 for ( v = k - 1; v >= i; v-- )
100 if (
p->nNodesCur > 10000 )
102 printf(
"reoShuffle() Error: BDD size is too large.\n" );
106 assert(
p->pOrderInt[i] == pPerm[i] );
116 for ( i = 0; i <
p->nRefNodes; i++ )
117 Cudd_RecursiveDeref( dd,
p->pRefNodes[i] );
127 bFuncPerm = Cudd_bddPermute( dd, bFunc, pPermInv ); Cudd_Ref( bFuncPerm );
128 if ( bFuncPerm != bFuncRes )
130 printf(
"REO: Internal verification has failed!\n" );
133 Cudd_RecursiveDeref( dd, bFuncPerm );
137 for ( i = 0; i <=
p->nSupp; i++ )
142 Cudd_Deref( bFuncRes );
163 DdNode * Temp, * bRemap;
164 int nSuppSize, OffSet, Num, i;
166 int pOrder[1000], pOrderInv[1000];
167 assert( dd->size < 1000 );
170 nSuppSize = Cudd_SupportSize( dd, Func );
174 for ( i = 0; i < nSuppSize; i++ )
176 for ( i = 0; i < 120; i++ )
178 OffSet = rand() % (nSuppSize - 1);
179 Num = pOrder[OffSet];
180 pOrder[OffSet] = pOrder[OffSet+1];
181 pOrder[OffSet+1] = Num;
183 for ( i = 0; i < nSuppSize; i++ )
184 pOrderInv[pOrder[i]] = i;
202 Temp =
reoShuffle( pReo, dd, bRemap, pOrder, pOrderInv ); Cudd_Ref( Temp );
210 bFuncPerm = Cudd_bddPermute( dd, bRemap, pOrderInv ); Cudd_Ref( bFuncPerm );
212 if ( bFuncPerm != Temp )
214 printf(
"REO: Internal verification has failed!\n" );
217 Cudd_RecursiveDeref( dd, bFuncPerm );
220 Cudd_RecursiveDeref( dd, Temp );
221 Cudd_RecursiveDeref( dd, bRemap );
ABC_NAMESPACE_IMPL_START DdNode * reoShuffle(reo_man *p, DdManager *dd, DdNode *bFunc, int *pPerm, int *pPermInv)
DECLARATIONS ///.