You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							330 lines
						
					
					
						
							13 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							330 lines
						
					
					
						
							13 KiB
						
					
					
				| /**CHeaderFile***************************************************************** | |
|  | |
|   FileName     [dddmp.h] | |
|  | |
|   PackageName  [dddmp] | |
|  | |
|   Synopsis     [Functions to read in and write out BDDs, ADDs | |
|     and CNF formulas from and to files.] | |
|  | |
|   Description  [] | |
|  | |
|   Author       [Gianpiero Cabodi and Stefano Quer] | |
|  | |
|   Copyright    [ | |
|     Copyright (c) 2002 by Politecnico di Torino. | |
|     All Rights Reserved. This software is for educational purposes only. | |
|     Permission is given to academic institutions to use, copy, and modify | |
|     this software and its documentation provided that this introductory | |
|     message is not removed, that this software and its documentation is | |
|     used for the institutions' internal research and educational purposes, | |
|     and that no monies are exchanged. No guarantee is expressed or implied | |
|     by the distribution of this code. | |
|     Send bug-reports and/or questions to: | |
|     {gianpiero.cabodi,stefano.quer}@polito.it. | |
|     ] | |
|  | |
| ******************************************************************************/ | |
| 
 | |
| #ifndef _DDDMP | |
| #define _DDDMP | |
|  | |
| #if 0 | |
| #define DDDMP_DEBUG | |
| #endif | |
|  | |
| /*---------------------------------------------------------------------------*/ | |
| /* Nested includes                                                           */ | |
| /*---------------------------------------------------------------------------*/ | |
|       | |
| #include "util.h" | |
| #include "cudd.h" | |
|  | |
| #ifdef __cplusplus | |
| extern "C" { | |
| #endif | |
|  | |
| /*---------------------------------------------------------------------------*/ | |
| /* Constant declarations                                                     */ | |
| /*---------------------------------------------------------------------------*/ | |
| 
 | |
| /*  | |
|  *  Dddmp format version  | |
|  */ | |
| 
 | |
| #define DDDMP_VERSION           "DDDMP-2.0" | |
|  | |
| /*  | |
|  *  Returned values (for theorically ALL the function of the package) | |
|  */ | |
| 
 | |
| #define DDDMP_FAILURE ((int) 0) | |
| #define DDDMP_SUCCESS ((int) 1) | |
|  | |
| /*  | |
|  *  Format modes for DD (BDD and ADD) files | |
|  */ | |
| 
 | |
| #define DDDMP_MODE_TEXT           ((int)'A') | |
| #define DDDMP_MODE_BINARY         ((int)'B') | |
| #define DDDMP_MODE_DEFAULT        ((int)'D') | |
|  | |
| /*---------------------------------------------------------------------------*/ | |
| /* Structure declarations                                                    */ | |
| /*---------------------------------------------------------------------------*/ | |
| 
 | |
| /*---------------------------------------------------------------------------*/ | |
| /* Type declarations                                                         */ | |
| /*---------------------------------------------------------------------------*/ | |
| 
 | |
| /**Enum************************************************************************ | |
|  | |
|   Synopsis    [Format modes for storing CNF files] | |
|  | |
|   Description [Type supported for storing BDDs into CNF | |
|     formulas. | |
|     Used internally to select the proper storing format: | |
|       DDDMP_CNF_MODE_NODE: create a CNF temporary variables for | |
|                            each BDD node | |
|       DDDMP_CNF_MODE_MAXTERM: no temporary variables | |
|       DDDMP_CNF_MODE_BEST: trade-off between the two previous methods | |
|     ] | |
|  | |
| ******************************************************************************/ | |
| 
 | |
| typedef enum { | |
|   DDDMP_CNF_MODE_NODE, | |
|   DDDMP_CNF_MODE_MAXTERM, | |
|   DDDMP_CNF_MODE_BEST | |
| } Dddmp_DecompCnfStoreType; | |
| 
 | |
| /**Enum************************************************************************ | |
|  | |
|   Synopsis    [Format modes for loading CNF files.] | |
|  | |
|   Description [Type supported for loading CNF formulas into BDDs. | |
|     Used internally to select the proper returning format: | |
|     ] | |
|  | |
| ******************************************************************************/ | |
| 
 | |
| typedef enum { | |
|   DDDMP_CNF_MODE_NO_CONJ, | |
|   DDDMP_CNF_MODE_NO_QUANT, | |
|   DDDMP_CNF_MODE_CONJ_QUANT | |
| } Dddmp_DecompCnfLoadType; | |
| 
 | |
| /**Enum************************************************************************ | |
|  | |
|   Synopsis    [Type for supported decomposition types.] | |
|  | |
|   Description [Type for supported decomposition types. | |
|     Used internally to select the proper type (bdd, add, ...). | |
|     Given externally as information fule content. | |
|     ] | |
|  | |
| ******************************************************************************/ | |
| 
 | |
| typedef enum { | |
|   DDDMP_BDD, | |
|   DDDMP_ADD, | |
|   DDDMP_CNF, | |
|   DDDMP_NONE | |
| } Dddmp_DecompType; | |
| 
 | |
| 
 | |
| /**Enum************************************************************************ | |
|  | |
|   Synopsis    [Type for variable extra info.] | |
|  | |
|   Description [Type for variable extra info. Used to specify info stored | |
|     in text mode.] | |
|  | |
| ******************************************************************************/ | |
| 
 | |
| typedef enum { | |
|   DDDMP_VARIDS, | |
|   DDDMP_VARPERMIDS, | |
|   DDDMP_VARAUXIDS, | |
|   DDDMP_VARNAMES, | |
|   DDDMP_VARDEFAULT | |
| } Dddmp_VarInfoType; | |
| 
 | |
| /**Enum************************************************************************ | |
|  | |
|   Synopsis    [Type for variable matching in BDD load.] | |
|  | |
|   Description [] | |
|  | |
| ******************************************************************************/ | |
| 
 | |
| typedef enum { | |
|   DDDMP_VAR_MATCHIDS, | |
|   DDDMP_VAR_MATCHPERMIDS, | |
|   DDDMP_VAR_MATCHAUXIDS, | |
|   DDDMP_VAR_MATCHNAMES, | |
|   DDDMP_VAR_COMPOSEIDS | |
| } Dddmp_VarMatchType; | |
| 
 | |
| /**Enum************************************************************************ | |
|  | |
|   Synopsis    [Type for BDD root matching in BDD load.] | |
|  | |
|   Description [] | |
|  | |
| ******************************************************************************/ | |
| 
 | |
| typedef enum { | |
|   DDDMP_ROOT_MATCHNAMES, | |
|   DDDMP_ROOT_MATCHLIST | |
| } Dddmp_RootMatchType; | |
| 
 | |
| typedef struct Dddmp_Hdr_s Dddmp_Hdr_t; | |
| 
 | |
| /*---------------------------------------------------------------------------*/ | |
| /* Variable declarations                                                     */ | |
| /*---------------------------------------------------------------------------*/ | |
| 
 | |
| /*---------------------------------------------------------------------------*/ | |
| /* Macro declarations                                                        */ | |
| /*---------------------------------------------------------------------------*/ | |
| 
 | |
| /**Macro*********************************************************************** | |
|   | |
|   Synopsis    [Checks for fatal bugs] | |
|   | |
|   Description [Conditional safety assertion. It prints out the file | |
|     name and line number where the fatal error occurred. | |
|     Messages are printed out on stderr. | |
|     ] | |
|   | |
|   SideEffects [None] | |
|   | |
|   SeeAlso     [] | |
|   | |
| ******************************************************************************/ | |
|   | |
| #ifdef DDDMP_DEBUG | |
| #  define Dddmp_Assert(expr,errMsg) \ | |
|      { \ | |
|      if ((expr) == 0) { \ | |
|        fprintf (stderr, "FATAL ERROR: %s\n", errMsg); \ | |
|        fprintf (stderr, "             File %s -> Line %d\n", \ | |
|          __FILE__, __LINE__); \ | |
|        fflush (stderr); \ | |
|        exit (DDDMP_FAILURE); \ | |
|        } \ | |
|      } | |
| #else | |
| #  define Dddmp_Assert(expr,errMsg) \ | |
|      {} | |
| #endif | |
|  | |
| /**Macro*********************************************************************** | |
|   | |
|   Synopsis    [Checks for Warnings: If expr==1 it prints out the warning | |
|     on stderr.] | |
|   | |
|   Description [] | |
|   | |
|   SideEffects [None] | |
|   | |
|   SeeAlso     [] | |
|   | |
| ******************************************************************************/ | |
|   | |
| #define Dddmp_Warning(expr,errMsg) \ | |
|   { \ | |
|   if ((expr) == 1) { \ | |
|     fprintf (stderr, "WARNING: %s\n", errMsg); \ | |
|     fprintf (stderr, "         File %s -> Line %d\n", \ | |
|       __FILE__, __LINE__); \ | |
|     fflush (stderr); \ | |
|     } \ | |
|   } | |
|  | |
| /**Macro*********************************************************************** | |
|   | |
|   Synopsis    [Checks for fatal bugs and return the DDDMP_FAILURE flag.] | |
|   | |
|   Description [] | |
|   | |
|   SideEffects [None] | |
|   | |
|   SeeAlso     [] | |
|   | |
| ******************************************************************************/ | |
|   | |
| #define Dddmp_CheckAndReturn(expr,errMsg) \ | |
|   { \ | |
|   if ((expr) == 1) { \ | |
|     fprintf (stderr, "FATAL ERROR: %s\n", errMsg); \ | |
|     fprintf (stderr, "             File %s -> Line %d\n", \ | |
|       __FILE__, __LINE__); \ | |
|     fflush (stderr); \ | |
|     return (DDDMP_FAILURE); \ | |
|     } \ | |
|   } | |
|  | |
| /**Macro*********************************************************************** | |
|   | |
|   Synopsis    [Checks for fatal bugs and go to the label to deal with | |
|     the error. | |
|     ] | |
|   | |
|   Description [] | |
|   | |
|   SideEffects [None] | |
|   | |
|   SeeAlso     [] | |
|   | |
| ******************************************************************************/ | |
|   | |
| #define Dddmp_CheckAndGotoLabel(expr,errMsg,label) \ | |
|   { \ | |
|   if ((expr) == 1) { \ | |
|     fprintf (stderr, "FATAL ERROR: %s\n", errMsg); \ | |
|     fprintf (stderr, "             File %s -> Line %d\n", \ | |
|       __FILE__, __LINE__); \ | |
|     fflush (stderr); \ | |
|     goto label; \ | |
|     } \ | |
|   } | |
|  | |
| /**AutomaticStart*************************************************************/ | |
| 
 | |
| /*---------------------------------------------------------------------------*/ | |
| /* Function prototypes                                                       */ | |
| /*---------------------------------------------------------------------------*/ | |
| 
 | |
| extern int Dddmp_Text2Bin(char *filein, char *fileout); | |
| extern int Dddmp_Bin2Text(char *filein, char *fileout); | |
| extern int Dddmp_cuddBddDisplayBinary(char *fileIn, char *fileOut); | |
| extern DdNode * Dddmp_cuddBddLoad(DdManager *ddMgr, Dddmp_VarMatchType varMatchMode, char **varmatchnames, int *varmatchauxids, int *varcomposeids, int mode, char *file, FILE *fp); | |
| extern int Dddmp_cuddBddArrayLoad(DdManager *ddMgr, Dddmp_RootMatchType rootMatchMode, char **rootmatchnames, Dddmp_VarMatchType varMatchMode, char **varmatchnames, int *varmatchauxids, int *varcomposeids, int mode, char *file, FILE *fp, DdNode ***pproots); | |
| extern DdNode * Dddmp_cuddAddLoad(DdManager *ddMgr, Dddmp_VarMatchType varMatchMode, char **varmatchnames, int *varmatchauxids, int *varcomposeids, int mode, char *file, FILE *fp); | |
| extern int Dddmp_cuddAddArrayLoad(DdManager *ddMgr, Dddmp_RootMatchType rootMatchMode, char **rootmatchnames, Dddmp_VarMatchType varMatchMode, char **varmatchnames, int *varmatchauxids, int *varcomposeids, int mode, char *file, FILE *fp, DdNode ***pproots); | |
| extern int Dddmp_cuddHeaderLoad (Dddmp_DecompType *ddType, int *nVars, int *nsuppvars, char ***suppVarNames, char ***orderedVarNames, int **varIds, int **composeIds, int **auxIds, int *nRoots, char *file, FILE *fp); | |
| extern int Dddmp_cuddBddLoadCnf(DdManager *ddMgr, Dddmp_VarMatchType varmatchmode, char **varmatchnames, int *varmatchauxids, int *varcomposeids, int mode, char *file, FILE *fp, DdNode ***rootsPtrPtr, int *nRoots); | |
| extern int Dddmp_cuddBddArrayLoadCnf(DdManager *ddMgr, Dddmp_RootMatchType rootmatchmode, char **rootmatchnames, Dddmp_VarMatchType varmatchmode, char **varmatchnames, int *varmatchauxids, int *varcomposeids, int mode, char *file, FILE *fp, DdNode ***rootsPtrPtr, int *nRoots); | |
| extern int Dddmp_cuddHeaderLoadCnf (int *nVars, int *nsuppvars, char ***suppVarNames, char ***orderedVarNames, int **varIds, int **composeIds, int **auxIds, int *nRoots, char *file, FILE *fp); | |
| extern int Dddmp_cuddAddStore(DdManager *ddMgr, char *ddname, DdNode *f, char **varnames, int *auxids, int mode, Dddmp_VarInfoType varinfo, char *fname, FILE *fp); | |
| extern int Dddmp_cuddAddArrayStore(DdManager *ddMgr, char *ddname, int nRoots, DdNode **f, char **rootnames, char **varnames, int *auxids, int mode, Dddmp_VarInfoType varinfo, char *fname, FILE *fp); | |
| extern int Dddmp_cuddBddStore(DdManager *ddMgr, char *ddname, DdNode *f, char **varnames, int *auxids, int mode, Dddmp_VarInfoType varinfo, char *fname, FILE *fp); | |
| extern int Dddmp_cuddBddArrayStore(DdManager *ddMgr, char *ddname, int nRoots, DdNode **f, char **rootnames, char **varnames, int *auxids, int mode, Dddmp_VarInfoType varinfo, char *fname, FILE *fp); | |
| extern int Dddmp_cuddBddStoreCnf(DdManager *ddMgr, DdNode *f, Dddmp_DecompCnfStoreType mode, int noHeader, char **varNames, int *bddIds, int *bddAuxIds, int *cnfIds, int idInitial, int edgeInTh, int pathLengthTh, char *fname, FILE *fp, int *clauseNPtr, int *varNewNPtr); | |
| extern int Dddmp_cuddBddArrayStoreCnf(DdManager *ddMgr, DdNode **f, int rootN, Dddmp_DecompCnfStoreType mode, int noHeader, char **varNames, int *bddIds, int *bddAuxIds, int *cnfIds, int idInitial, int edgeInTh, int pathLengthTh, char *fname, FILE *fp, int *clauseNPtr, int *varNewNPtr); | |
| extern int Dddmp_cuddBddStorePrefix(DdManager *ddMgr, int nRoots, DdNode *f, char **inputNames, char **outputNames, char *modelName, char *fileName, FILE *fp); | |
| extern int Dddmp_cuddBddArrayStorePrefix(DdManager *ddMgr, int nroots, DdNode **f, char **inputNames, char **outputNames, char *modelName, char *fname, FILE *fp); | |
| extern int Dddmp_cuddBddStoreBlif(DdManager *ddMgr, int nRoots, DdNode *f, char **inputNames, char **outputNames, char *modelName, char *fileName, FILE *fp); | |
| extern int Dddmp_cuddBddArrayStoreBlif(DdManager *ddMgr, int nroots, DdNode **f, char **inputNames, char **outputNames, char *modelName, char *fname, FILE *fp); | |
| extern int Dddmp_cuddBddStoreSmv(DdManager *ddMgr, int nRoots, DdNode *f, char **inputNames, char **outputNames, char *modelName, char *fileName, FILE *fp); | |
| extern int Dddmp_cuddBddArrayStoreSmv(DdManager *ddMgr, int nroots, DdNode **f, char **inputNames, char **outputNames, char *modelName, char *fname, FILE *fp); | |
| 
 | |
| /**AutomaticEnd***************************************************************/ | |
| 
 | |
| #ifdef __cplusplus | |
| } | |
| #endif | |
|  | |
| #endif
 |