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
|