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.
		
		
		
		
		
			
		
			
				
					
					
						
							216 lines
						
					
					
						
							7.8 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							216 lines
						
					
					
						
							7.8 KiB
						
					
					
				| /**CHeaderFile***************************************************************** | |
|  | |
|   FileName     [dddmpInt.h] | |
|  | |
|   PackageName  [dddmp] | |
|  | |
|   Synopsis     [Low level functions to read in and write out bdds to file] | |
|  | |
|   Description  [A set of internal low-level routines of the dddmp package | |
|     doing: | |
|     <ul> | |
|       <li> read and write of node codes in binary mode, | |
|       <li> read and write of integers in binary mode, | |
|       <li> marking/unmarking nodes as visited, | |
|       <li> numbering nodes. | |
|     </ul> | |
|     ] | |
|  | |
|   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 _DDDMPINT | |
| #define _DDDMPINT | |
|  | |
| #include "dddmp.h" | |
| #include "cuddInt.h" | |
|  | |
| #ifdef __cplusplus | |
| extern "C" { | |
| #endif | |
|  | |
| /*---------------------------------------------------------------------------*/ | |
| /* Constant declarations                                                     */ | |
| /*---------------------------------------------------------------------------*/ | |
| 
 | |
| /* constants for code fields */ | |
| #define DDDMP_TERMINAL      0 | |
| #define DDDMP_ABSOLUTE_ID   1 | |
| #define DDDMP_RELATIVE_ID   2 | |
| #define DDDMP_RELATIVE_1    3 | |
|  | |
| #define DDDMP_MAXSTRLEN 500 | |
|  | |
| /*---------------------------------------------------------------------------*/ | |
| /* Type declarations                                                         */ | |
| /*---------------------------------------------------------------------------*/ | |
| 
 | |
| /*---------------------------------------------------------------------------*/ | |
| /* Structure declarations                                                     */ | |
| /*---------------------------------------------------------------------------*/ | |
| 
 | |
| /**Struct********************************************************************** | |
|  Synopsis    [used in binary mode to store code info of a dd node] | |
|  Description [V , T , E store the mode used to represent variable, Then  | |
|               and Else indexes. An index is either an absolute | |
| 	      ( DDDMP_ABSOLUTE_ID ), | |
|               a relative numbers ( DDDMP_RELATIVE_ID , DDDMP_RELATIVE_1 ) or  | |
|               a terminal node ( DDDMP_TERMINAL ) . | |
| 	      Ecomp is used for the complemented edge attribute. | |
|              ] | |
|  SideEffect  [none] | |
|  SeeAlso     [DddmpWriteCode DddmpReadCode]  | |
| ******************************************************************************/ | |
| 
 | |
| struct binary_dd_code { | |
|   unsigned  Unused : 1; | |
|   unsigned  V      : 2; | |
|   unsigned  T      : 2; | |
|   unsigned  Ecompl : 1; | |
|   unsigned  E      : 2; | |
| }; | |
| 
 | |
| /**Struct********************************************************************* | |
|  | |
|  Synopsis    [BDD file header] | |
|  | |
|  Description [Structure containing the BDD header file infos] | |
|  | |
| ******************************************************************************/ | |
| 
 | |
| struct Dddmp_Hdr_s { | |
|   char *ver; | |
|   char mode; | |
|   Dddmp_DecompType ddType; | |
|   Dddmp_VarInfoType varinfo; | |
|   char *dd; | |
|   int nnodes; | |
|   int nVars; | |
|   int nsuppvars; | |
|   char **orderedVarNames; | |
|   char **suppVarNames; | |
|   int *ids; | |
|   int *permids; | |
|   int *auxids; | |
|   int *cnfids; | |
|   int nRoots; | |
|   int *rootids; | |
|   char **rootnames; | |
|   int nAddedCnfVar; | |
|   int nVarsCnf; | |
|   int nClausesCnf;   | |
| };	 | |
| 
 | |
| /*---------------------------------------------------------------------------*/ | |
| /* Variable declarations                                                     */ | |
| /*---------------------------------------------------------------------------*/ | |
| 
 | |
| /*---------------------------------------------------------------------------*/ | |
| /* Macro declarations                                                        */ | |
| /*---------------------------------------------------------------------------*/ | |
| 
 | |
| /**Macro*********************************************************************** | |
|  | |
|   Synopsis     [Memory Allocation Macro for DDDMP] | |
|  | |
|   Description  [] | |
|  | |
|   SideEffects  [None] | |
|  | |
|   SeeAlso      [] | |
|  | |
| ******************************************************************************/ | |
| 
 | |
| #ifdef ALLOC | |
| #  define DDDMP_ALLOC(type, num)	ALLOC(type,num) | |
| #else | |
| #  define DDDMP_ALLOC(type, num)	\ | |
|      ((type *) malloc(sizeof(type) * (num))) | |
| #endif | |
|  | |
| /**Macro*********************************************************************** | |
|  | |
|   Synopsis     [Memory Free Macro for DDDMP] | |
|  | |
|   Description  [] | |
|  | |
|   SideEffects  [None] | |
|  | |
|   SeeAlso      [] | |
|  | |
| ******************************************************************************/ | |
| 
 | |
| #ifdef FREE | |
| #define DDDMP_FREE(p)  (FREE(p)) | |
| #else | |
| #define DDDMP_FREE(p)	\ | |
|     ((p)!=NULL)?(free(p)):0) | |
| #endif | |
|  | |
| 
 | |
| /**AutomaticStart*************************************************************/ | |
| 
 | |
| /*---------------------------------------------------------------------------*/ | |
| /* Function prototypes                                                       */ | |
| /*---------------------------------------------------------------------------*/ | |
| 
 | |
| extern int DddmpWriteCode(FILE *fp, struct binary_dd_code code); | |
| extern int DddmpReadCode(FILE *fp, struct binary_dd_code *pcode); | |
| extern int DddmpWriteInt(FILE *fp, int id); | |
| extern int DddmpReadInt(FILE *fp, int *pid); | |
| extern int DddmpNumberAddNodes(DdManager *ddMgr, DdNode **f, int n); | |
| extern void DddmpUnnumberAddNodes(DdManager *ddMgr, DdNode **f, int n); | |
| extern void DddmpWriteNodeIndexAdd(DdNode *f, int id); | |
| extern int DddmpReadNodeIndexAdd(DdNode *f); | |
| extern int DddmpVisitedAdd(DdNode *f); | |
| extern void DddmpSetVisitedAdd(DdNode *f); | |
| extern void DddmpClearVisitedAdd(DdNode *f); | |
| extern int DddmpNumberBddNodes(DdManager *ddMgr, DdNode **f, int n); | |
| extern void DddmpUnnumberBddNodes(DdManager *ddMgr, DdNode **f, int n); | |
| extern void DddmpWriteNodeIndexBdd(DdNode *f, int id); | |
| extern int DddmpReadNodeIndexBdd(DdNode *f); | |
| extern int DddmpVisitedBdd(DdNode *f); | |
| extern void DddmpSetVisitedBdd(DdNode *f); | |
| extern void DddmpClearVisitedBdd(DdNode *f); | |
| extern int DddmpNumberDdNodesCnf(DdManager *ddMgr, DdNode **f, int rootN, int *cnfIds, int id); | |
| extern int DddmpDdNodesCountEdgesAndNumber(DdManager *ddMgr, DdNode **f, int rootN, int edgeInTh, int pathLengthTh, int *cnfIds, int id); | |
| extern void DddmpUnnumberDdNodesCnf(DdManager *ddMgr, DdNode **f, int rootN); | |
| extern int DddmpPrintBddAndNext(DdManager *ddMgr, DdNode **f, int rootN); | |
| extern int DddmpWriteNodeIndexCnf(DdNode *f, int id); | |
| extern int DddmpVisitedCnf(DdNode *f); | |
| extern void DddmpSetVisitedCnf(DdNode *f); | |
| extern int DddmpReadNodeIndexCnf(DdNode *f); | |
| extern int DddmpCuddDdArrayStoreBdd(Dddmp_DecompType ddType, 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 DddmpCuddBddArrayStore(Dddmp_DecompType ddType, 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 QsortStrcmp(const void *ps1, const void *ps2); | |
| extern int FindVarname(char *name, char **array, int n); | |
| extern char * DddmpStrDup(char *str); | |
| extern char ** DddmpStrArrayDup(char **array, int n); | |
| extern char ** DddmpStrArrayRead(FILE *fp, int n); | |
| extern int DddmpStrArrayWrite(FILE *fp, char **array, int n); | |
| extern void DddmpStrArrayFree(char **array, int n); | |
| extern int * DddmpIntArrayDup(int *array, int n); | |
| extern int * DddmpIntArrayRead(FILE *fp, int n); | |
| extern int DddmpIntArrayWrite(FILE *fp, int *array, int n); | |
| 
 | |
| /**AutomaticEnd***************************************************************/ | |
| 
 | |
| #ifdef __cplusplus | |
| } | |
| #endif | |
|  | |
| #endif
 |