47 #define DD_GET_SYMM_VARS_TAG 0x0a
219 memset( p->
pSymms[0], 0, nVars * nVars *
sizeof(
char) );
221 for ( i = 1; i < nVars; i++ )
261 for ( i = 0; i < p->
nVars; i++ )
263 for ( k = 0; k <= i; k++ )
265 for ( k = i+1; k < p->
nVars; k++ )
295 DdNode * zSet, * zCube, * zTemp;
305 memset( pMapVars2Nums, 0, dd->
size *
sizeof(
int) );
311 for ( i = 0, bTemp = bSupp; bTemp !=
b1; bTemp =
cuddT(bTemp), i++ )
314 pMapVars2Nums[bTemp->
index] = i;
326 iVar1 = zCube->
index/2;
327 iVar2 =
cuddT(zCube)->index/2;
328 if ( pMapVars2Nums[iVar1] < pMapVars2Nums[iVar2] )
329 p->
pSymms[ pMapVars2Nums[iVar1] ][ pMapVars2Nums[iVar2] ] = 1;
331 p->
pSymms[ pMapVars2Nums[iVar2] ][ pMapVars2Nums[iVar1] ] = 1;
373 assert( iVar2 < dd->size );
415 for ( i = 0, bTemp = bSupp; bTemp !=
b1; bTemp =
cuddT(bTemp), i++ )
419 for ( i = 0; i < nSuppSize; i++ )
420 for ( k = i+1; k < nSuppSize; k++ )
449 DdNode * bCube1, * bCube2;
450 DdNode * bCof01, * bCof10;
455 assert( iVar2 < dd->size );
463 Res = (int)( bCof10 == bCof01 );
502 DdNode *bVarSet = bVarsN, *bVarsK = bVarsN;
506 while ( bVarSet !=
b1 )
512 bVarSet =
cuddT( bVarSet );
523 for ( i = 0; i < nVars-K; i++ )
524 bVarsK =
cuddT( bVarsK );
602 for ( i = 0; i < nVars-2; i++ )
603 bVarsK =
cuddT( bVarsK );
614 DdNode * zTemp, * zPlus, * zSymmVars;
625 for ( bVarsNew = bVars; LevelF > dd->
perm[bVarsNew->
index]; bVarsNew =
cuddT(bVarsNew) )
681 if ( zSymmVars == NULL )
692 if ( zSymmVars ==
z0 )
735 if ( bVarsExtra == NULL )
755 for ( i = 0; i < nVars-2; i++ )
756 bVarsK =
cuddT( bVarsK );
837 if ( LevelF < LevelG )
847 for ( bVarsNew = bVars; LevelFG > dd->
perm[bVarsNew->
index]; bVarsNew =
cuddT(bVarsNew) );
851 if ( LevelF == LevelFG )
867 if ( LevelG == LevelFG )
941 if ( bF == bG && bVars != bVarsNew )
952 if ( bVarsExtra == NULL )
1024 if ( zPlus == NULL )
1078 DdNode * bVarsThis, * bVarsLower, * bTemp;
1083 for ( bVarsThis = bVars; LevelF >
cuddI(dd,bVarsThis->
index); bVarsThis =
cuddT(bVarsThis) );
1086 bVarsLower =
cuddT(bVarsThis);
1088 bVarsLower = bVarsThis;
1119 if ( bVarsThis != bVars )
1125 if ( bVarsExtra == NULL )
1195 if ( bVarsR != bVars )
1220 if ( LevelF < iLev2 )
1244 if ( LevelF < iLev1 )
1260 else if ( LevelF == iLev1 )
1273 if ( bRes0 ==
z0 || bRes1 ==
z0 )
1281 else if ( LevelF < iLev2 )
1295 if ( bRes0 ==
z0 || bRes1 ==
z0 )
1303 else if ( LevelF == iLev2 )
1346 DdNode *zRes, *zRes0, *zRes1;
1368 if ( zRes0 == NULL )
1382 if ( zRes1 == NULL )
1427 if ( zS ==
z0 )
return z0;
1428 if ( zS ==
z1 )
return z1;
1435 DdNode * zS0, * zS1, * zTemp;
DdNode * cuddBddExistAbstractRecur(DdManager *manager, DdNode *f, DdNode *cube)
DdNode * cuddCacheLookupZdd(DdManager *table, ptruint op, DdNode *f, DdNode *g, DdNode *h)
DdNode * cuddCacheLookup2Zdd(DdManager *table, DD_CTFP op, DdNode *f, DdNode *g)
void Cudd_RecursiveDerefZdd(DdManager *table, DdNode *n)
void Cudd_RecursiveDeref(DdManager *table, DdNode *n)
DdNode * cuddZddGetNode(DdManager *zdd, int id, DdNode *T, DdNode *E)
void cuddCacheInsert2(DdManager *table, DD_CTFP op, DdNode *f, DdNode *g, DdNode *data)
DdNode * Cudd_Support(DdManager *dd, DdNode *f)
#define Cudd_Regular(node)
void cuddCacheInsert(DdManager *table, ptruint op, DdNode *f, DdNode *g, DdNode *h, DdNode *data)
#define ABC_ALLOC(type, num)
DdNode * Cudd_zddDiff(DdManager *dd, DdNode *P, DdNode *Q)
for(p=first;p->value< newval;p=p->next)
DdNode * cuddCacheLookup2(DdManager *table, DD_CTFP op, DdNode *f, DdNode *g)
DdNode * Cudd_Cofactor(DdManager *dd, DdNode *f, DdNode *g)
DdNode * cuddZddIntersect(DdManager *zdd, DdNode *P, DdNode *Q)
#define ABC_NAMESPACE_IMPL_END
#define cuddIsConstant(node)
#define ABC_NAMESPACE_IMPL_START
DdNode * cuddZddUnion(DdManager *zdd, DdNode *P, DdNode *Q)
DdNode * Cudd_bddAnd(DdManager *dd, DdNode *f, DdNode *g)
DdNode * cuddBddAndRecur(DdManager *manager, DdNode *f, DdNode *g)
DdNode * cuddCacheLookup1Zdd(DdManager *table, DD_CTFP1 op, DdNode *f)
void cuddCacheInsert1(DdManager *table, DD_CTFP1 op, DdNode *f, DdNode *data)