abc-master
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
extraBdd.h
Go to the documentation of this file.
1 /**CFile****************************************************************
2 
3  FileName [extraBdd.h]
4 
5  SystemName [ABC: Logic synthesis and verification system.]
6 
7  PackageName [extra]
8 
9  Synopsis [Various reusable software utilities.]
10 
11  Description [This library contains a number of operators and
12  traversal routines developed to extend the functionality of
13  CUDD v.2.3.x, by Fabio Somenzi (http://vlsi.colorado.edu/~fabio/)
14  To compile your code with the library, #include "extra.h"
15  in your source files and link your project to CUDD and this
16  library. Use the library at your own risk and with caution.
17  Note that debugging of some operators still continues.]
18 
19  Author [Alan Mishchenko]
20 
21  Affiliation [UC Berkeley]
22 
23  Date [Ver. 1.0. Started - June 20, 2005.]
24 
25  Revision [$Id: extraBdd.h,v 1.00 2005/06/20 00:00:00 alanmi Exp $]
26 
27 ***********************************************************************/
28 
29 #ifndef ABC__misc__extra__extra_bdd_h
30 #define ABC__misc__extra__extra_bdd_h
31 
32 
33 #ifdef _WIN32
34 #define inline __inline // compatible with MS VS 6.0
35 #endif
36 
37 /*---------------------------------------------------------------------------*/
38 /* Nested includes */
39 /*---------------------------------------------------------------------------*/
40 
41 #include <stdio.h>
42 #include <stdlib.h>
43 #include <string.h>
44 #include <assert.h>
45 
46 #include "misc/st/st.h"
47 #include "bdd/cudd/cuddInt.h"
48 #include "misc/extra/extra.h"
49 
50 
52 
53 
54 /*---------------------------------------------------------------------------*/
55 /* Constant declarations */
56 /*---------------------------------------------------------------------------*/
57 
58 /*---------------------------------------------------------------------------*/
59 /* Stucture declarations */
60 /*---------------------------------------------------------------------------*/
61 
62 /*---------------------------------------------------------------------------*/
63 /* Type declarations */
64 /*---------------------------------------------------------------------------*/
65 
66 /*---------------------------------------------------------------------------*/
67 /* Variable declarations */
68 /*---------------------------------------------------------------------------*/
69 
70 /*---------------------------------------------------------------------------*/
71 /* Macro declarations */
72 /*---------------------------------------------------------------------------*/
73 
74 /* constants of the manager */
75 #define b0 Cudd_Not((dd)->one)
76 #define b1 (dd)->one
77 #define z0 (dd)->zero
78 #define z1 (dd)->one
79 #define a0 (dd)->zero
80 #define a1 (dd)->one
81 
82 // hash key macros
83 #define hashKey1(a,TSIZE) \
84 ((ABC_PTRUINT_T)(a) % TSIZE)
85 
86 #define hashKey2(a,b,TSIZE) \
87 (((ABC_PTRUINT_T)(a) + (ABC_PTRUINT_T)(b) * DD_P1) % TSIZE)
88 
89 #define hashKey3(a,b,c,TSIZE) \
90 (((((ABC_PTRUINT_T)(a) + (ABC_PTRUINT_T)(b)) * DD_P1 + (ABC_PTRUINT_T)(c)) * DD_P2 ) % TSIZE)
91 
92 #define hashKey4(a,b,c,d,TSIZE) \
93 ((((((ABC_PTRUINT_T)(a) + (ABC_PTRUINT_T)(b)) * DD_P1 + (ABC_PTRUINT_T)(c)) * DD_P2 + \
94  (ABC_PTRUINT_T)(d)) * DD_P3) % TSIZE)
95 
96 #define hashKey5(a,b,c,d,e,TSIZE) \
97 (((((((ABC_PTRUINT_T)(a) + (ABC_PTRUINT_T)(b)) * DD_P1 + (ABC_PTRUINT_T)(c)) * DD_P2 + \
98  (ABC_PTRUINT_T)(d)) * DD_P3 + (ABC_PTRUINT_T)(e)) * DD_P1) % TSIZE)
99 
100 /*===========================================================================*/
101 /* Various Utilities */
102 /*===========================================================================*/
103 
104 /*=== extraBddAuto.c ========================================================*/
105 
106 extern DdNode * Extra_bddSpaceFromFunctionFast( DdManager * dd, DdNode * bFunc );
107 extern DdNode * Extra_bddSpaceFromFunction( DdManager * dd, DdNode * bF, DdNode * bG );
108 extern DdNode * extraBddSpaceFromFunction( DdManager * dd, DdNode * bF, DdNode * bG );
109 extern DdNode * Extra_bddSpaceFromFunctionPos( DdManager * dd, DdNode * bFunc );
110 extern DdNode * extraBddSpaceFromFunctionPos( DdManager * dd, DdNode * bFunc );
111 extern DdNode * Extra_bddSpaceFromFunctionNeg( DdManager * dd, DdNode * bFunc );
112 extern DdNode * extraBddSpaceFromFunctionNeg( DdManager * dd, DdNode * bFunc );
113 
114 extern DdNode * Extra_bddSpaceCanonVars( DdManager * dd, DdNode * bSpace );
115 extern DdNode * extraBddSpaceCanonVars( DdManager * dd, DdNode * bSpace );
116 
117 extern DdNode * Extra_bddSpaceEquations( DdManager * dd, DdNode * bSpace );
118 extern DdNode * Extra_bddSpaceEquationsNeg( DdManager * dd, DdNode * bSpace );
119 extern DdNode * extraBddSpaceEquationsNeg( DdManager * dd, DdNode * bSpace );
120 extern DdNode * Extra_bddSpaceEquationsPos( DdManager * dd, DdNode * bSpace );
121 extern DdNode * extraBddSpaceEquationsPos( DdManager * dd, DdNode * bSpace );
122 
123 extern DdNode * Extra_bddSpaceFromMatrixPos( DdManager * dd, DdNode * zA );
124 extern DdNode * extraBddSpaceFromMatrixPos( DdManager * dd, DdNode * zA );
125 extern DdNode * Extra_bddSpaceFromMatrixNeg( DdManager * dd, DdNode * zA );
126 extern DdNode * extraBddSpaceFromMatrixNeg( DdManager * dd, DdNode * zA );
127 
128 extern DdNode * Extra_bddSpaceReduce( DdManager * dd, DdNode * bFunc, DdNode * bCanonVars );
129 extern DdNode ** Extra_bddSpaceExorGates( DdManager * dd, DdNode * bFuncRed, DdNode * zEquations );
130 
131 /*=== extraBddCas.c =============================================================*/
132 
133 /* performs the binary encoding of the set of function using the given vars */
134 extern DdNode * Extra_bddEncodingBinary( DdManager * dd, DdNode ** pbFuncs, int nFuncs, DdNode ** pbVars, int nVars );
135 /* solves the column encoding problem using a sophisticated method */
136 extern DdNode * Extra_bddEncodingNonStrict( DdManager * dd, DdNode ** pbColumns, int nColumns, DdNode * bVarsCol, DdNode ** pCVars, int nMulti, int * pSimple );
137 /* collects the nodes under the cut and, for each node, computes the sum of paths leading to it from the root */
138 extern st__table * Extra_bddNodePathsUnderCut( DdManager * dd, DdNode * bFunc, int CutLevel );
139 /* collects the nodes under the cut starting from the given set of ADD nodes */
140 extern int Extra_bddNodePathsUnderCutArray( DdManager * dd, DdNode ** paNodes, DdNode ** pbCubes, int nNodes, DdNode ** paNodesRes, DdNode ** pbCubesRes, int CutLevel );
141 /* find the profile of a DD (the number of edges crossing each level) */
142 extern int Extra_ProfileWidth( DdManager * dd, DdNode * F, int * Profile, int CutLevel );
143 
144 /*=== extraBddImage.c ================================================================*/
145 
148  DdManager * dd, DdNode * bCare,
149  int nParts, DdNode ** pbParts,
150  int nVars, DdNode ** pbVars, int fVerbose );
151 extern DdNode * Extra_bddImageCompute( Extra_ImageTree_t * pTree, DdNode * bCare );
152 extern void Extra_bddImageTreeDelete( Extra_ImageTree_t * pTree );
153 extern DdNode * Extra_bddImageRead( Extra_ImageTree_t * pTree );
154 
157  DdManager * dd, DdNode * bCare,
158  int nParts, DdNode ** pbParts,
159  int nVars, DdNode ** pbVars, int fVerbose );
160 extern DdNode * Extra_bddImageCompute2( Extra_ImageTree2_t * pTree, DdNode * bCare );
161 extern void Extra_bddImageTreeDelete2( Extra_ImageTree2_t * pTree );
162 extern DdNode * Extra_bddImageRead2( Extra_ImageTree2_t * pTree );
163 
164 /*=== extraBddMisc.c ========================================================*/
165 
166 extern DdNode * Extra_TransferPermute( DdManager * ddSource, DdManager * ddDestination, DdNode * f, int * Permute );
167 extern DdNode * Extra_TransferLevelByLevel( DdManager * ddSource, DdManager * ddDestination, DdNode * f );
168 extern DdNode * Extra_bddRemapUp( DdManager * dd, DdNode * bF );
169 extern DdNode * Extra_bddMove( DdManager * dd, DdNode * bF, int nVars );
170 extern DdNode * extraBddMove( DdManager * dd, DdNode * bF, DdNode * bFlag );
171 extern void Extra_StopManager( DdManager * dd );
172 extern void Extra_bddPrint( DdManager * dd, DdNode * F );
173 extern void Extra_bddPrintSupport( DdManager * dd, DdNode * F );
174 extern void extraDecomposeCover( DdManager* dd, DdNode* zC, DdNode** zC0, DdNode** zC1, DdNode** zC2 );
175 extern int Extra_bddSuppSize( DdManager * dd, DdNode * bSupp );
176 extern int Extra_bddSuppContainVar( DdManager * dd, DdNode * bS, DdNode * bVar );
177 extern int Extra_bddSuppOverlapping( DdManager * dd, DdNode * S1, DdNode * S2 );
178 extern int Extra_bddSuppDifferentVars( DdManager * dd, DdNode * S1, DdNode * S2, int DiffMax );
179 extern int Extra_bddSuppCheckContainment( DdManager * dd, DdNode * bL, DdNode * bH, DdNode ** bLarge, DdNode ** bSmall );
180 extern int * Extra_SupportArray( DdManager * dd, DdNode * F, int * support );
181 extern int * Extra_VectorSupportArray( DdManager * dd, DdNode ** F, int n, int * support );
182 extern DdNode * Extra_bddFindOneCube( DdManager * dd, DdNode * bF );
183 extern DdNode * Extra_bddGetOneCube( DdManager * dd, DdNode * bFunc );
184 extern DdNode * Extra_bddComputeRangeCube( DdManager * dd, int iStart, int iStop );
185 extern DdNode * Extra_bddBitsToCube( DdManager * dd, int Code, int CodeWidth, DdNode ** pbVars, int fMsbFirst );
187 extern int Extra_bddIsVar( DdNode * bFunc );
188 extern DdNode * Extra_bddCreateAnd( DdManager * dd, int nVars );
189 extern DdNode * Extra_bddCreateOr( DdManager * dd, int nVars );
190 extern DdNode * Extra_bddCreateExor( DdManager * dd, int nVars );
191 extern DdNode * Extra_zddPrimes( DdManager * dd, DdNode * F );
192 extern void Extra_bddPermuteArray( DdManager * dd, DdNode ** bNodesIn, DdNode ** bNodesOut, int nNodes, int *permut );
193 extern DdNode * Extra_bddComputeCube( DdManager * dd, DdNode ** bXVars, int nVars );
194 extern DdNode * Extra_bddChangePolarity( DdManager * dd, DdNode * bFunc, DdNode * bVars );
195 extern DdNode * extraBddChangePolarity( DdManager * dd, DdNode * bFunc, DdNode * bVars );
196 extern int Extra_bddVarIsInCube( DdNode * bCube, int iVar );
197 extern DdNode * Extra_bddAndPermute( DdManager * ddF, DdNode * bF, DdManager * ddG, DdNode * bG, int * pPermute );
198 
199 #ifndef ABC_PRB
200 #define ABC_PRB(dd,f) printf("%s = ", #f); Extra_bddPrint(dd,f); printf("\n")
201 #endif
202 
203 /*=== extraBddKmap.c ================================================================*/
204 
205 /* displays the Karnaugh Map of a function */
206 extern void Extra_PrintKMap( FILE * pFile, DdManager * dd, DdNode * OnSet, DdNode * OffSet, int nVars, DdNode ** XVars, int fSuppType, char ** pVarNames );
207 /* displays the Karnaugh Map of a relation */
208 extern void Extra_PrintKMapRelation( FILE * pFile, DdManager * dd, DdNode * OnSet, DdNode * OffSet, int nXVars, int nYVars, DdNode ** XVars, DdNode ** YVars );
209 
210 /*=== extraBddSymm.c =================================================================*/
211 
214  int nVars; // the number of variables in the support
215  int nVarsMax; // the number of variables in the DD manager
216  int nSymms; // the number of pair-wise symmetries
217  int nNodes; // the number of nodes in a ZDD (if applicable)
218  int * pVars; // the list of all variables present in the support
219  char ** pSymms; // the symmetry information
220 };
221 
222 /* computes the classical symmetry information for the function - recursive */
223 extern Extra_SymmInfo_t * Extra_SymmPairsCompute( DdManager * dd, DdNode * bFunc );
224 /* computes the classical symmetry information for the function - using naive approach */
226 extern int Extra_bddCheckVarsSymmetricNaive( DdManager * dd, DdNode * bF, int iVar1, int iVar2 );
227 
228 /* allocates the data structure */
229 extern Extra_SymmInfo_t * Extra_SymmPairsAllocate( int nVars );
230 /* deallocates the data structure */
232 /* print the contents the data structure */
233 extern void Extra_SymmPairsPrint( Extra_SymmInfo_t * );
234 /* converts the ZDD into the Extra_SymmInfo_t structure */
235 extern Extra_SymmInfo_t * Extra_SymmPairsCreateFromZdd( DdManager * dd, DdNode * zPairs, DdNode * bVars );
236 
237 /* computes the classical symmetry information as a ZDD */
238 extern DdNode * Extra_zddSymmPairsCompute( DdManager * dd, DdNode * bF, DdNode * bVars );
239 extern DdNode * extraZddSymmPairsCompute( DdManager * dd, DdNode * bF, DdNode * bVars );
240 /* returns a singleton-set ZDD containing all variables that are symmetric with the given one */
241 extern DdNode * Extra_zddGetSymmetricVars( DdManager * dd, DdNode * bF, DdNode * bG, DdNode * bVars );
242 extern DdNode * extraZddGetSymmetricVars( DdManager * dd, DdNode * bF, DdNode * bG, DdNode * bVars );
243 /* converts a set of variables into a set of singleton subsets */
244 extern DdNode * Extra_zddGetSingletons( DdManager * dd, DdNode * bVars );
245 extern DdNode * extraZddGetSingletons( DdManager * dd, DdNode * bVars );
246 /* filters the set of variables using the support of the function */
247 extern DdNode * Extra_bddReduceVarSet( DdManager * dd, DdNode * bVars, DdNode * bF );
248 extern DdNode * extraBddReduceVarSet( DdManager * dd, DdNode * bVars, DdNode * bF );
249 
250 /* checks the possibility that the two vars are symmetric */
251 extern int Extra_bddCheckVarsSymmetric( DdManager * dd, DdNode * bF, int iVar1, int iVar2 );
252 extern DdNode * extraBddCheckVarsSymmetric( DdManager * dd, DdNode * bF, DdNode * bVars );
253 
254 /* build the set of all tuples of K variables out of N from the BDD cube */
255 extern DdNode * Extra_zddTuplesFromBdd( DdManager * dd, int K, DdNode * bVarsN );
256 extern DdNode * extraZddTuplesFromBdd( DdManager * dd, DdNode * bVarsK, DdNode * bVarsN );
257 /* selects one subset from a ZDD representing the set of subsets */
258 extern DdNode * Extra_zddSelectOneSubset( DdManager * dd, DdNode * zS );
259 extern DdNode * extraZddSelectOneSubset( DdManager * dd, DdNode * zS );
260 
261 /*=== extraBddUnate.c =================================================================*/
262 
263 extern DdNode * Extra_bddAndTime( DdManager * dd, DdNode * f, DdNode * g, int TimeOut );
264 extern DdNode * Extra_bddAndAbstractTime( DdManager * manager, DdNode * f, DdNode * g, DdNode * cube, int TimeOut );
265 extern DdNode * Extra_TransferPermuteTime( DdManager * ddSource, DdManager * ddDestination, DdNode * f, int * Permute, int TimeOut );
266 
267 /*=== extraBddUnate.c =================================================================*/
268 
271  unsigned iVar : 30; // index of the variable
272  unsigned Pos : 1; // 1 if positive unate
273  unsigned Neg : 1; // 1 if negative unate
274 };
275 
278  int nVars; // the number of variables in the support
279  int nVarsMax; // the number of variables in the DD manager
280  int nUnate; // the number of unate variables
281  Extra_UnateVar_t * pVars; // the array of variables present in the support
282 };
283 
284 /* allocates the data structure */
285 extern Extra_UnateInfo_t * Extra_UnateInfoAllocate( int nVars );
286 /* deallocates the data structure */
288 /* print the contents the data structure */
289 extern void Extra_UnateInfoPrint( Extra_UnateInfo_t * );
290 /* converts the ZDD into the Extra_SymmInfo_t structure */
291 extern Extra_UnateInfo_t * Extra_UnateInfoCreateFromZdd( DdManager * dd, DdNode * zUnate, DdNode * bVars );
292 /* naive check of unateness of one variable */
293 extern int Extra_bddCheckUnateNaive( DdManager * dd, DdNode * bF, int iVar );
294 
295 /* computes the unateness information for the function */
296 extern Extra_UnateInfo_t * Extra_UnateComputeFast( DdManager * dd, DdNode * bFunc );
297 extern Extra_UnateInfo_t * Extra_UnateComputeSlow( DdManager * dd, DdNode * bFunc );
298 
299 /* computes the classical symmetry information as a ZDD */
300 extern DdNode * Extra_zddUnateInfoCompute( DdManager * dd, DdNode * bF, DdNode * bVars );
301 extern DdNode * extraZddUnateInfoCompute( DdManager * dd, DdNode * bF, DdNode * bVars );
302 
303 /* converts a set of variables into a set of singleton subsets */
304 extern DdNode * Extra_zddGetSingletonsBoth( DdManager * dd, DdNode * bVars );
305 extern DdNode * extraZddGetSingletonsBoth( DdManager * dd, DdNode * bVars );
306 
307 /**AutomaticEnd***************************************************************/
308 
309 
310 
312 
313 
314 
315 #endif /* __EXTRA_H__ */
DdNode * Extra_bddSpaceFromFunction(DdManager *dd, DdNode *bF, DdNode *bG)
Definition: extraBddAuto.c:253
int Extra_bddSuppContainVar(DdManager *dd, DdNode *bS, DdNode *bVar)
Definition: extraBddMisc.c:346
char ** pSymms
Definition: extraBdd.h:219
int Extra_bddSuppSize(DdManager *dd, DdNode *bSupp)
Definition: extraBddMisc.c:321
int Extra_bddVarIsInCube(DdNode *bCube, int iVar)
Definition: cudd.h:278
DdNode * Extra_bddSupportNegativeCube(DdManager *dd, DdNode *f)
Definition: extraBddMisc.c:764
DdNode * extraBddSpaceFromMatrixPos(DdManager *dd, DdNode *zA)
DdNode * extraBddChangePolarity(DdManager *dd, DdNode *bFunc, DdNode *bVars)
Extra_UnateInfo_t * Extra_UnateInfoCreateFromZdd(DdManager *dd, DdNode *zUnate, DdNode *bVars)
void Extra_bddPermuteArray(DdManager *dd, DdNode **bNodesIn, DdNode **bNodesOut, int nNodes, int *permut)
Definition: extraBddMisc.c:961
Extra_SymmInfo_t * Extra_SymmPairsComputeNaive(DdManager *dd, DdNode *bFunc)
Definition: extraBddSymm.c:396
DdNode * Extra_bddSpaceFromMatrixNeg(DdManager *dd, DdNode *zA)
Definition: extraBddAuto.c:452
ush Pos
Definition: deflate.h:88
DdNode * Extra_bddSpaceFromMatrixPos(DdManager *dd, DdNode *zA)
Definition: extraBddAuto.c:431
void Extra_bddPrintSupport(DdManager *dd, DdNode *F)
Definition: extraBddMisc.c:302
DdNode * Extra_bddEncodingNonStrict(DdManager *dd, DdNode **pbColumns, int nColumns, DdNode *bVarsCol, DdNode **pCVars, int nMulti, int *pSimple)
Definition: extraBddCas.c:184
DdNode * Extra_TransferPermute(DdManager *ddSource, DdManager *ddDestination, DdNode *f, int *Permute)
Definition: extraBddMisc.c:87
DdNode * Extra_bddComputeCube(DdManager *dd, DdNode **bXVars, int nVars)
DdNode * extraZddGetSymmetricVars(DdManager *dd, DdNode *bF, DdNode *bG, DdNode *bVars)
Definition: extraBddSymm.c:804
void Extra_bddImageTreeDelete2(Extra_ImageTree2_t *pTree)
int Extra_bddSuppDifferentVars(DdManager *dd, DdNode *S1, DdNode *S2, int DiffMax)
Definition: extraBddMisc.c:393
DdNode * extraBddReduceVarSet(DdManager *dd, DdNode *bVars, DdNode *bF)
void Extra_PrintKMapRelation(FILE *pFile, DdManager *dd, DdNode *OnSet, DdNode *OffSet, int nXVars, int nYVars, DdNode **XVars, DdNode **YVars)
Definition: extraBddKmap.c:581
DdNode * extraBddSpaceFromFunctionPos(DdManager *dd, DdNode *bFunc)
Definition: extraBddAuto.c:738
DdNode * Extra_TransferPermuteTime(DdManager *ddSource, DdManager *ddDestination, DdNode *f, int *Permute, int TimeOut)
Definition: extraBddTime.c:150
unsigned iVar
Definition: extraBdd.h:271
void Extra_bddImageTreeDelete(Extra_ImageTree_t *pTree)
DdNode * Extra_zddGetSingletonsBoth(DdManager *dd, DdNode *bVars)
DdNode * Extra_bddSpaceFromFunctionNeg(DdManager *dd, DdNode *bFunc)
Definition: extraBddAuto.c:295
void Extra_StopManager(DdManager *dd)
Definition: extraBddMisc.c:223
int * Extra_VectorSupportArray(DdManager *dd, DdNode **F, int n, int *support)
Definition: extraBddMisc.c:572
DdNode * Extra_bddSpaceReduce(DdManager *dd, DdNode *bFunc, DdNode *bCanonVars)
Definition: extraBddAuto.c:337
void Extra_UnateInfoPrint(Extra_UnateInfo_t *)
Extra_SymmInfo_t * Extra_SymmPairsCompute(DdManager *dd, DdNode *bFunc)
Definition: extraBddSymm.c:73
DdNode * Extra_bddSpaceCanonVars(DdManager *dd, DdNode *bSpace)
Definition: extraBddAuto.c:316
DdNode * extraBddCheckVarsSymmetric(DdManager *dd, DdNode *bF, DdNode *bVars)
Extra_SymmInfo_t * Extra_SymmPairsCreateFromZdd(DdManager *dd, DdNode *zPairs, DdNode *bVars)
Definition: extraBddSymm.c:288
DdNode * Extra_zddPrimes(DdManager *dd, DdNode *F)
Definition: extraBddMisc.c:933
void Extra_PrintKMap(FILE *pFile, DdManager *dd, DdNode *OnSet, DdNode *OffSet, int nVars, DdNode **XVars, int fSuppType, char **pVarNames)
Definition: extraBddKmap.c:201
DdNode * Extra_bddCreateOr(DdManager *dd, int nVars)
Definition: extraBddMisc.c:883
Extra_ImageTree_t * Extra_bddImageStart(DdManager *dd, DdNode *bCare, int nParts, DdNode **pbParts, int nVars, DdNode **pbVars, int fVerbose)
DdNode * Extra_bddSpaceEquations(DdManager *dd, DdNode *bSpace)
Definition: extraBddAuto.c:361
void extraDecomposeCover(DdManager *dd, DdNode *zC, DdNode **zC0, DdNode **zC1, DdNode **zC2)
DdNode * Extra_bddAndTime(DdManager *dd, DdNode *f, DdNode *g, int TimeOut)
Definition: extraBddTime.c:83
DdNode * Extra_bddImageRead(Extra_ImageTree_t *pTree)
DdNode * Extra_bddReduceVarSet(DdManager *dd, DdNode *bVars, DdNode *bF)
Definition: extraBddSymm.c:181
Extra_UnateInfo_t * Extra_UnateComputeSlow(DdManager *dd, DdNode *bFunc)
DdNode * extraBddSpaceEquationsPos(DdManager *dd, DdNode *bSpace)
DdNode * Extra_TransferLevelByLevel(DdManager *ddSource, DdManager *ddDestination, DdNode *f)
Definition: extraBddMisc.c:112
DdNode * extraBddMove(DdManager *dd, DdNode *bF, DdNode *bFlag)
int Extra_bddCheckUnateNaive(DdManager *dd, DdNode *bF, int iVar)
DdNode * Extra_bddComputeRangeCube(DdManager *dd, int iStart, int iStop)
Definition: extraBddMisc.c:699
#define Code
Definition: deflate.h:76
Definition: st.h:52
DdNode * Extra_zddSelectOneSubset(DdManager *dd, DdNode *zS)
Definition: extraBddSymm.c:546
DdNode * Extra_bddMove(DdManager *dd, DdNode *bF, int nVars)
Definition: extraBddMisc.c:187
DdNode * Extra_bddImageRead2(Extra_ImageTree2_t *pTree)
int Extra_bddIsVar(DdNode *bFunc)
Definition: extraBddMisc.c:839
int * Extra_SupportArray(DdManager *dd, DdNode *F, int *support)
Definition: extraBddMisc.c:537
DdNode * Extra_bddImageCompute(Extra_ImageTree_t *pTree, DdNode *bCare)
DdNode * Extra_bddGetOneCube(DdManager *dd, DdNode *bFunc)
Definition: extraBddMisc.c:645
void Extra_bddPrint(DdManager *dd, DdNode *F)
Definition: extraBddMisc.c:246
Extra_SymmInfo_t * Extra_SymmPairsAllocate(int nVars)
Definition: extraBddSymm.c:207
DdNode * Extra_zddUnateInfoCompute(DdManager *dd, DdNode *bF, DdNode *bVars)
st__table * Extra_bddNodePathsUnderCut(DdManager *dd, DdNode *bFunc, int CutLevel)
Definition: extraBddCas.c:263
DdNode ** Extra_bddSpaceExorGates(DdManager *dd, DdNode *bFuncRed, DdNode *zEquations)
Definition: extraBddAuto.c:497
DdNode * Extra_bddEncodingBinary(DdManager *dd, DdNode **pbFuncs, int nFuncs, DdNode **pbVars, int nVars)
Definition: extraBddCas.c:138
int Extra_bddSuppCheckContainment(DdManager *dd, DdNode *bL, DdNode *bH, DdNode **bLarge, DdNode **bSmall)
Definition: extraBddMisc.c:443
int Extra_bddSuppOverlapping(DdManager *dd, DdNode *S1, DdNode *S2)
Definition: extraBddMisc.c:365
DdNode * Extra_bddAndPermute(DdManager *ddF, DdNode *bF, DdManager *ddG, DdNode *bG, int *pPermute)
DdNode * extraZddUnateInfoCompute(DdManager *dd, DdNode *bF, DdNode *bVars)
Extra_UnateInfo_t * Extra_UnateComputeFast(DdManager *dd, DdNode *bFunc)
Definition: extraBddUnate.c:73
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.
Definition: abc_global.h:105
DdNode * extraBddSpaceFromMatrixNeg(DdManager *dd, DdNode *zA)
DdNode * Extra_bddRemapUp(DdManager *dd, DdNode *bF)
Definition: extraBddMisc.c:145
int Extra_bddCheckVarsSymmetricNaive(DdManager *dd, DdNode *bF, int iVar1, int iVar2)
Definition: extraBddSymm.c:443
DdNode * Extra_zddSymmPairsCompute(DdManager *dd, DdNode *bF, DdNode *bVars)
Definition: extraBddSymm.c:105
DdNode * Extra_bddCreateExor(DdManager *dd, int nVars)
Definition: extraBddMisc.c:908
DdNode * Extra_bddSpaceEquationsPos(DdManager *dd, DdNode *bSpace)
Definition: extraBddAuto.c:387
DdNode * extraZddTuplesFromBdd(DdManager *dd, DdNode *bVarsK, DdNode *bVarsN)
DdNode * Extra_bddSpaceFromFunctionPos(DdManager *dd, DdNode *bFunc)
Definition: extraBddAuto.c:274
#define ABC_NAMESPACE_HEADER_END
Definition: abc_global.h:106
DdNode * extraZddSymmPairsCompute(DdManager *dd, DdNode *bF, DdNode *bVars)
Definition: extraBddSymm.c:580
DdNode * Extra_bddFindOneCube(DdManager *dd, DdNode *bF)
Definition: extraBddMisc.c:605
DdNode * extraBddSpaceFromFunction(DdManager *dd, DdNode *bF, DdNode *bG)
Definition: extraBddAuto.c:562
void Extra_SymmPairsPrint(Extra_SymmInfo_t *)
Definition: extraBddSymm.c:257
int Extra_bddNodePathsUnderCutArray(DdManager *dd, DdNode **paNodes, DdNode **pbCubes, int nNodes, DdNode **paNodesRes, DdNode **pbCubesRes, int CutLevel)
Definition: extraBddCas.c:355
DdNode * Extra_zddGetSymmetricVars(DdManager *dd, DdNode *bF, DdNode *bG, DdNode *bVars)
Definition: extraBddSymm.c:130
unsigned Neg
Definition: extraBdd.h:273
void Extra_SymmPairsDissolve(Extra_SymmInfo_t *)
Definition: extraBddSymm.c:238
Extra_UnateInfo_t * Extra_UnateInfoAllocate(int nVars)
DdNode * Extra_zddGetSingletons(DdManager *dd, DdNode *bVars)
Definition: extraBddSymm.c:157
int Extra_ProfileWidth(DdManager *dd, DdNode *F, int *Profile, int CutLevel)
Definition: extraBddCas.c:519
DdNode * Extra_bddCreateAnd(DdManager *dd, int nVars)
Definition: extraBddMisc.c:858
DdNode * Extra_bddAndAbstractTime(DdManager *manager, DdNode *f, DdNode *g, DdNode *cube, int TimeOut)
Definition: extraBddTime.c:117
DdNode * Extra_zddTuplesFromBdd(DdManager *dd, int K, DdNode *bVarsN)
Definition: extraBddSymm.c:488
Extra_UnateVar_t * pVars
Definition: extraBdd.h:281
DdNode * Extra_bddBitsToCube(DdManager *dd, int Code, int CodeWidth, DdNode **pbVars, int fMsbFirst)
Definition: extraBddMisc.c:730
int Extra_bddCheckVarsSymmetric(DdManager *dd, DdNode *bF, int iVar1, int iVar2)
Definition: extraBddSymm.c:360
DdNode * Extra_bddSpaceFromFunctionFast(DdManager *dd, DdNode *bFunc)
Definition: extraBddAuto.c:153
DdNode * extraZddGetSingletonsBoth(DdManager *dd, DdNode *bVars)
DdNode * extraZddSelectOneSubset(DdManager *dd, DdNode *zS)
void Extra_UnateInfoDissolve(Extra_UnateInfo_t *)
DdNode * extraBddSpaceFromFunctionNeg(DdManager *dd, DdNode *bFunc)
Definition: extraBddAuto.c:869
DdNode * extraZddGetSingletons(DdManager *dd, DdNode *bVars)
DdNode * Extra_bddImageCompute2(Extra_ImageTree2_t *pTree, DdNode *bCare)
DdNode * Extra_bddChangePolarity(DdManager *dd, DdNode *bFunc, DdNode *bVars)
DdNode * extraBddSpaceEquationsNeg(DdManager *dd, DdNode *bSpace)
Extra_ImageTree2_t * Extra_bddImageStart2(DdManager *dd, DdNode *bCare, int nParts, DdNode **pbParts, int nVars, DdNode **pbVars, int fVerbose)
DdNode * Extra_bddSpaceEquationsNeg(DdManager *dd, DdNode *bSpace)
Definition: extraBddAuto.c:409
DdNode * extraBddSpaceCanonVars(DdManager *dd, DdNode *bSpace)