SVF
Functions | Variables
cuddInit.c File Reference
#include "CUDD/util.h"
#include "CUDD/cuddInt.h"

Go to the source code of this file.

Functions

DdManagerCudd_Init (unsigned int numVars, unsigned int numVarsZ, unsigned int numSlots, unsigned int cacheSize, unsigned long maxMemory)
 
void Cudd_Quit (DdManager *unique)
 
int cuddZddInitUniv (DdManager *zdd)
 
void cuddZddFreeUniv (DdManager *zdd)
 

Variables

static char rcsid [] DD_UNUSED = "$Id: cuddInit.c,v 1.34 2012/02/05 01:07:19 fabio Exp $"
 

Function Documentation

◆ Cudd_Init()

DdManager* Cudd_Init ( unsigned int  numVars,
unsigned int  numVarsZ,
unsigned int  numSlots,
unsigned int  cacheSize,
unsigned long  maxMemory 
)

AutomaticStart AutomaticEnd Function********************************************************************

Synopsis [Creates a new DD manager.]

Description [Creates a new DD manager, initializes the table, the basic constants and the projection functions. If maxMemory is 0, Cudd_Init decides suitable values for the maximum size of the cache and for the limit for fast unique table growth based on the available memory. Returns a pointer to the manager if successful; NULL otherwise.]

SideEffects [None]

SeeAlso [Cudd_Quit]

Definition at line 121 of file cuddInit.c.

127 {
128  DdManager *unique;
129  int i,result;
130  DdNode *one, *zero;
131  unsigned int maxCacheSize;
132  unsigned int looseUpTo;
133  extern DD_OOMFP MMoutOfMemory;
134  DD_OOMFP saveHandler;
135 
136  if (maxMemory == 0) {
137  maxMemory = getSoftDataLimit();
138  }
139  looseUpTo = (unsigned int) ((maxMemory / sizeof(DdNode)) /
141  unique = cuddInitTable(numVars,numVarsZ,numSlots,looseUpTo);
142  if (unique == NULL) return(NULL);
143  unique->maxmem = (unsigned long) maxMemory / 10 * 9;
144  maxCacheSize = (unsigned int) ((maxMemory / sizeof(DdCache)) /
146  result = cuddInitCache(unique,cacheSize,maxCacheSize);
147  if (result == 0) return(NULL);
148 
149  saveHandler = MMoutOfMemory;
150  MMoutOfMemory = Cudd_OutOfMem;
151  unique->stash = ALLOC(char,(maxMemory / DD_STASH_FRACTION) + 4);
152  MMoutOfMemory = saveHandler;
153  if (unique->stash == NULL) {
154  (void) fprintf(unique->err,"Unable to set aside memory\n");
155  }
156 
157  /* Initialize constants. */
158  unique->one = cuddUniqueConst(unique,1.0);
159  if (unique->one == NULL) return(0);
160  cuddRef(unique->one);
161  unique->zero = cuddUniqueConst(unique,0.0);
162  if (unique->zero == NULL) return(0);
163  cuddRef(unique->zero);
164 #ifdef HAVE_IEEE_754
165  if (DD_PLUS_INF_VAL != DD_PLUS_INF_VAL * 3 ||
167  (void) fprintf(unique->err,"Warning: Crippled infinite values\n");
168  (void) fprintf(unique->err,"Recompile without -DHAVE_IEEE_754\n");
169  }
170 #endif
171  unique->plusinfinity = cuddUniqueConst(unique,DD_PLUS_INF_VAL);
172  if (unique->plusinfinity == NULL) return(0);
173  cuddRef(unique->plusinfinity);
175  if (unique->minusinfinity == NULL) return(0);
176  cuddRef(unique->minusinfinity);
177  unique->background = unique->zero;
178 
179  /* The logical zero is different from the CUDD_VALUE_TYPE zero! */
180  one = unique->one;
181  zero = Cudd_Not(one);
182  /* Create the projection functions. */
183  unique->vars = ALLOC(DdNodePtr,unique->maxSize);
184  if (unique->vars == NULL) {
185  unique->errorCode = CUDD_MEMORY_OUT;
186  return(NULL);
187  }
188  for (i = 0; i < unique->size; i++) {
189  unique->vars[i] = cuddUniqueInter(unique,i,one,zero);
190  if (unique->vars[i] == NULL) return(0);
191  cuddRef(unique->vars[i]);
192  }
193 
194  if (unique->sizeZ)
195  cuddZddInitUniv(unique);
196 
197  unique->memused += sizeof(DdNode *) * unique->maxSize;
198 
199  return(unique);
200 
201 } /* end of Cudd_Init */
#define cuddRef(n)
Definition: cuddInt.h:557
int cuddZddInitUniv(DdManager *zdd)
Definition: cuddInit.c:245
void Cudd_OutOfMem(long size)
Definition: cuddUtil.c:2845
Definition: cudd.h:270
#define Cudd_Not(node)
Definition: cudd.h:354
#define DD_MAX_CACHE_FRACTION
Definition: cuddInt.h:141
DdNode * cuddUniqueConst(DdManager *unique, CUDD_VALUE_TYPE value)
Definition: cuddTable.c:1479
int size
Definition: cuddInt.h:345
#define DD_STASH_FRACTION
Definition: cuddInt.h:143
DdNode * zero
Definition: cuddInt.h:330
#define DD_MAX_LOOSE_FRACTION
Definition: cuddInt.h:139
FILE * err
Definition: cuddInt.h:424
#define DD_PLUS_INF_VAL
Definition: cuddInt.h:118
void(* DD_OOMFP)(long)
Definition: cudd.h:311
static DdNode * one
Definition: cuddSat.c:105
char * stash
Definition: cuddInt.h:382
#define ALLOC(type, num)
Definition: util.h:76
int maxSize
Definition: cuddInt.h:347
unsigned long getSoftDataLimit(void)
Definition: datalimit.c:35
void(* MMoutOfMemory)(long)
Definition: safe_mem.c:32
DdManager * cuddInitTable(unsigned int numVars, unsigned int numVarsZ, unsigned int numSlots, unsigned int looseUpTo)
Definition: cuddTable.c:380
unsigned long memused
Definition: cuddInt.h:429
int sizeZ
Definition: cuddInt.h:346
DdNode ** vars
Definition: cuddInt.h:373
static DdNode * zero
Definition: cuddSat.c:105
DdNode * one
Definition: cuddInt.h:329
DdNode * plusinfinity
Definition: cuddInt.h:331
static int result
Definition: cuddGenetic.c:121
unsigned long maxmem
Definition: cuddInt.h:430
DdNode * minusinfinity
Definition: cuddInt.h:332
int cuddInitCache(DdManager *unique, unsigned int cacheSize, unsigned int maxCacheSize)
Definition: cuddCache.c:132
#define DD_MINUS_INF_VAL
Definition: cuddInt.h:122
Cudd_ErrorType errorCode
Definition: cuddInt.h:425
DdNode * cuddUniqueInter(DdManager *unique, int index, DdNode *T, DdNode *E)
Definition: cuddTable.c:1137
DdNode * background
Definition: cuddInt.h:333

◆ Cudd_Quit()

void Cudd_Quit ( DdManager unique)

Function********************************************************************

Synopsis [Deletes resources associated with a DD manager.]

Description [Deletes resources associated with a DD manager and resets the global statistical counters. (Otherwise, another manaqger subsequently created would inherit the stats of this one.)]

SideEffects [None]

SeeAlso [Cudd_Init]

Definition at line 218 of file cuddInit.c.

220 {
221  if (unique->stash != NULL) FREE(unique->stash);
222  cuddFreeTable(unique);
223 
224 } /* end of Cudd_Quit */
#define FREE(obj)
Definition: util.h:80
char * stash
Definition: cuddInt.h:382
void cuddFreeTable(DdManager *unique)
Definition: cuddTable.c:692

◆ cuddZddFreeUniv()

void cuddZddFreeUniv ( DdManager zdd)

Function********************************************************************

Synopsis [Frees the ZDD universe.]

Description [Frees the ZDD universe.]

SideEffects [None]

SeeAlso [cuddZddInitUniv]

Definition at line 294 of file cuddInit.c.

296 {
297  if (zdd->univ) {
298  Cudd_RecursiveDerefZdd(zdd, zdd->univ[0]);
299  FREE(zdd->univ);
300  }
301 
302 } /* end of cuddZddFreeUniv */
void Cudd_RecursiveDerefZdd(DdManager *table, DdNode *n)
Definition: cuddRef.c:381
#define FREE(obj)
Definition: util.h:80
DdNode ** univ
Definition: cuddInt.h:375

◆ cuddZddInitUniv()

int cuddZddInitUniv ( DdManager zdd)

Function********************************************************************

Synopsis [Initializes the ZDD universe.]

Description [Initializes the ZDD universe. Returns 1 if successful; 0 otherwise.]

SideEffects [None]

SeeAlso [cuddZddFreeUniv]

Definition at line 245 of file cuddInit.c.

247 {
248  DdNode *p, *res;
249  int i;
250 
251  zdd->univ = ALLOC(DdNodePtr, zdd->sizeZ);
252  if (zdd->univ == NULL) {
253  zdd->errorCode = CUDD_MEMORY_OUT;
254  return(0);
255  }
256 
257  res = DD_ONE(zdd);
258  cuddRef(res);
259  for (i = zdd->sizeZ - 1; i >= 0; i--) {
260  unsigned int index = zdd->invpermZ[i];
261  p = res;
262  res = cuddUniqueInterZdd(zdd, index, p, p);
263  if (res == NULL) {
264  Cudd_RecursiveDerefZdd(zdd,p);
265  FREE(zdd->univ);
266  return(0);
267  }
268  cuddRef(res);
269  cuddDeref(p);
270  zdd->univ[i] = res;
271  }
272 
273 #ifdef DD_VERBOSE
274  cuddZddP(zdd, zdd->univ[0]);
275 #endif
276 
277  return(1);
278 
279 } /* end of cuddZddInitUniv */
#define cuddRef(n)
Definition: cuddInt.h:557
void Cudd_RecursiveDerefZdd(DdManager *table, DdNode *n)
Definition: cuddRef.c:381
#define cuddDeref(n)
Definition: cuddInt.h:577
Definition: cudd.h:270
#define FREE(obj)
Definition: util.h:80
int * invpermZ
Definition: cuddInt.h:372
#define ALLOC(type, num)
Definition: util.h:76
DdNode * cuddUniqueInterZdd(DdManager *unique, int index, DdNode *T, DdNode *E)
Definition: cuddTable.c:1372
int sizeZ
Definition: cuddInt.h:346
#define DD_ONE(dd)
Definition: cuddInt.h:864
Cudd_ErrorType errorCode
Definition: cuddInt.h:425
int cuddZddP(DdManager *zdd, DdNode *f)
DdNode ** univ
Definition: cuddInt.h:375

Variable Documentation

◆ DD_UNUSED

char rcsid [] DD_UNUSED = "$Id: cuddInit.c,v 1.34 2012/02/05 01:07:19 fabio Exp $"
static

CFile***********************************************************************

FileName [cuddInit.c]

PackageName [cudd]

Synopsis [Functions to initialize and shut down the DD manager.]

Description [External procedures included in this module:

Internal procedures included in this module:

]

SeeAlso []

Author [Fabio Somenzi]

Copyright [Copyright (c) 1995-2012, Regents of the University of Colorado

All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

Neither the name of the University of Colorado nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.]

Definition at line 82 of file cuddInit.c.