00001
00024 #ifndef _NTR
00025 #define _NTR
00026
00027
00028
00029
00030
00031 #include "dddmp.h"
00032 #include "bnet.h"
00033
00034
00035
00036
00037
00038 #define PI_PS_FROM_FILE 0
00039 #define PI_PS_DFS 1
00040 #define PI_PS_GIVEN 2
00041
00042 #define NTR_IMAGE_MONO 0
00043 #define NTR_IMAGE_PART 1
00044 #define NTR_IMAGE_CLIP 2
00045 #define NTR_IMAGE_DEPEND 3
00046
00047 #define NTR_UNDER_APPROX 0
00048 #define NTR_OVER_APPROX 1
00049
00050 #define NTR_FROM_NEW 0
00051 #define NTR_FROM_REACHED 1
00052 #define NTR_FROM_RESTRICT 2
00053 #define NTR_FROM_COMPACT 3
00054 #define NTR_FROM_SQUEEZE 4
00055 #define NTR_FROM_UNDERAPPROX 5
00056 #define NTR_FROM_OVERAPPROX 6
00057
00058 #define NTR_GROUP_NONE 0
00059 #define NTR_GROUP_DEFAULT 1
00060 #define NTR_GROUP_FIXED 2
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070 typedef struct NtrOptions {
00071 long initialTime;
00072 int verify;
00073 char *file1;
00074 char *file2;
00075 int second;
00076 int traverse;
00077 int depend;
00078 int image;
00079 double imageClip;
00080 int approx;
00081 int threshold;
00082 int from;
00083 int groupnsps;
00084 int closure;
00085 double closureClip;
00086 int envelope;
00087 int scc;
00088 int zddtest;
00089 int maxflow;
00090 char *sinkfile;
00091 int partition;
00092 int char2vect;
00093 int density;
00094 double quality;
00095 int decomp;
00096 int cofest;
00097 double clip;
00098 int noBuild;
00099 int stateOnly;
00100 char *node;
00101 int locGlob;
00102 int progress;
00103 int cacheSize;
00104 unsigned long maxMemory;
00105 int slots;
00106 int ordering;
00107 char *orderPiPs;
00108 Cudd_ReorderingType reordering;
00109 int autoDyn;
00110 Cudd_ReorderingType autoMethod;
00111 char *treefile;
00112 int firstReorder;
00113 int countDead;
00114
00115 int maxGrowth;
00116 Cudd_AggregationType groupcheck;
00117 int arcviolation;
00118
00119 int symmviolation;
00120
00121 int recomb;
00122 int nodrop;
00123 int signatures;
00124 int gaOnOff;
00125 int populationSize;
00126 int numberXovers;
00127 int bdddump;
00128 int dumpFmt;
00129
00130 char *dumpfile;
00131 int store;
00132 char *storefile;
00133 int load;
00134 char *loadfile;
00135 int verb;
00136 } NtrOptions;
00137
00138 typedef struct NtrHeapSlot {
00139 void *item;
00140 int key;
00141 } NtrHeapSlot;
00142
00143 typedef struct NtrHeap {
00144 int size;
00145 int nslots;
00146 NtrHeapSlot *slots;
00147 } NtrHeap;
00148
00149 typedef struct NtrPartTR {
00150 int nparts;
00151 DdNode **part;
00152 DdNode **icube;
00153 DdNode **pcube;
00154 DdNode **nscube;
00155 DdNode *preiabs;
00156 DdNode *prepabs;
00157 DdNode *xw;
00158 NtrHeap *factors;
00159 int nlatches;
00160 DdNode **x;
00161 DdNode **y;
00162 } NtrPartTR;
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173 #ifndef EXTERN
00174 # ifdef __cplusplus
00175 # define EXTERN extern "C"
00176 # else
00177 # define EXTERN extern
00178 # endif
00179 #endif
00180 #ifndef ARGS
00181 # if defined(__STDC__) || defined(__cplusplus)
00182 # define ARGS(protos) protos
00183 # else
00184 # define ARGS(protos) ()
00185 # endif
00186 #endif
00187
00188 #ifndef TRUE
00189 # define TRUE 1
00190 #endif
00191 #ifndef FALSE
00192 # define FALSE 0
00193 #endif
00194
00206 #define STRING_EQUAL(s1,s2) (strcmp((s1),(s2)) == 0)
00207
00208
00211
00212
00213
00214
00215 EXTERN int Ntr_buildDDs ARGS((BnetNetwork *net, DdManager *dd, NtrOptions *option, BnetNetwork *net2));
00216 EXTERN NtrPartTR * Ntr_buildTR ARGS((DdManager *dd, BnetNetwork *net, NtrOptions *option, int image));
00217 EXTERN DdNode * Ntr_TransitiveClosure ARGS((DdManager *dd, NtrPartTR *TR, NtrOptions *option));
00218 EXTERN int Ntr_Trav ARGS((DdManager *dd, BnetNetwork *net, NtrOptions *option));
00219 EXTERN int Ntr_SCC ARGS((DdManager *dd, BnetNetwork *net, NtrOptions *option));
00220 EXTERN int Ntr_ClosureTrav ARGS((DdManager *dd, BnetNetwork *net, NtrOptions *option));
00221 EXTERN void Ntr_freeTR ARGS((DdManager *dd, NtrPartTR *TR));
00222 EXTERN NtrPartTR * Ntr_cloneTR ARGS((NtrPartTR *TR));
00223 EXTERN DdNode * Ntr_initState ARGS((DdManager *dd, BnetNetwork *net, NtrOptions *option));
00224 EXTERN DdNode * Ntr_getStateCube ARGS((DdManager *dd, BnetNetwork *net, char *filename, int pr));
00225 EXTERN int Ntr_Envelope ARGS((DdManager *dd, NtrPartTR *TR, FILE *dfp, NtrOptions *option));
00226 EXTERN int Ntr_TestMinimization ARGS((DdManager *dd, BnetNetwork *net1, BnetNetwork *net2, NtrOptions *option));
00227 EXTERN int Ntr_TestDensity ARGS((DdManager *dd, BnetNetwork *net1, NtrOptions *option));
00228 EXTERN int Ntr_TestDecomp ARGS((DdManager *dd, BnetNetwork *net1, NtrOptions *option));
00229 EXTERN int Ntr_VerifyEquivalence ARGS((DdManager *dd, BnetNetwork *net1, BnetNetwork *net2, NtrOptions *option));
00230 EXTERN int Ntr_TestCofactorEstimate ARGS((DdManager * dd, BnetNetwork * net, NtrOptions * option));
00231 EXTERN int Ntr_TestClipping ARGS((DdManager *dd, BnetNetwork *net1, BnetNetwork *net2, NtrOptions *option));
00232 EXTERN int Ntr_maxflow ARGS((DdManager *dd, BnetNetwork *net, NtrOptions *option));
00233 EXTERN double Ntr_maximum01Flow ARGS((DdManager *bdd, DdNode *sx, DdNode *ty, DdNode *E, DdNode **F, DdNode **cut, DdNode **x, DdNode **y, DdNode **z, int n, int pr));
00234 EXTERN int Ntr_testZDD ARGS((DdManager *dd, BnetNetwork *net, NtrOptions *option));
00235 EXTERN int Ntr_testISOP ARGS((DdManager *dd, BnetNetwork *net, NtrOptions *option));
00236 EXTERN NtrHeap * Ntr_InitHeap ARGS((int size));
00237 EXTERN void Ntr_FreeHeap ARGS((NtrHeap *heap));
00238 EXTERN int Ntr_HeapInsert ARGS((NtrHeap *heap, void *item, int key));
00239 EXTERN int Ntr_HeapExtractMin ARGS((NtrHeap *heap, void **item, int *key));
00240 EXTERN int Ntr_HeapCount ARGS((NtrHeap *heap));
00241 EXTERN NtrHeap * Ntr_HeapClone ARGS((NtrHeap *source));
00242 EXTERN int Ntr_TestHeap ARGS((NtrHeap *heap, int i));
00243
00246 #endif