abc-master
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
cuddAddIte.c File Reference
#include "misc/util/util_hack.h"
#include "cuddInt.h"

Go to the source code of this file.

Functions

static void addVarToConst (DdNode *f, DdNode **gp, DdNode **hp, DdNode *one, DdNode *zero)
 
DdNodeCudd_addIte (DdManager *dd, DdNode *f, DdNode *g, DdNode *h)
 
DdNodeCudd_addIteConstant (DdManager *dd, DdNode *f, DdNode *g, DdNode *h)
 
DdNodeCudd_addEvalConst (DdManager *dd, DdNode *f, DdNode *g)
 
DdNodeCudd_addCmpl (DdManager *dd, DdNode *f)
 
int Cudd_addLeq (DdManager *dd, DdNode *f, DdNode *g)
 
DdNodecuddAddIteRecur (DdManager *dd, DdNode *f, DdNode *g, DdNode *h)
 
DdNodecuddAddCmplRecur (DdManager *dd, DdNode *f)
 

Variables

static
ABC_NAMESPACE_IMPL_START char
rcsid[] 
DD_UNUSED = "$Id: cuddAddIte.c,v 1.15 2004/08/13 18:04:45 fabio Exp $"
 

Function Documentation

static void addVarToConst ( DdNode f,
DdNode **  gp,
DdNode **  hp,
DdNode one,
DdNode zero 
)
static

AutomaticStart

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

Synopsis [Replaces variables with constants if possible (part of canonical form).]

Description []

SideEffects [None]

Definition at line 625 of file cuddAddIte.c.

631 {
632  DdNode *g = *gp;
633  DdNode *h = *hp;
634 
635  if (f == g) { /* ITE(F,F,H) = ITE(F,1,H) = F + H */
636  *gp = one;
637  }
638 
639  if (f == h) { /* ITE(F,G,F) = ITE(F,G,0) = F * G */
640  *hp = zero;
641  }
642 
643 } /* end of addVarToConst */
Definition: cudd.h:278
static DdNode * one
Definition: cuddDecomp.c:112
static DdNode * zero
Definition: cuddApa.c:100
DdNode* Cudd_addCmpl ( DdManager dd,
DdNode f 
)

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

Synopsis [Computes the complement of an ADD a la C language.]

Description [Computes the complement of an ADD a la C language: The complement of 0 is 1 and the complement of everything else is 0. Returns a pointer to the resulting ADD if successful; NULL otherwise.]

SideEffects [None]

SeeAlso [Cudd_addNegate]

Definition at line 347 of file cuddAddIte.c.

350 {
351  DdNode *res;
352 
353  do {
354  dd->reordered = 0;
355  res = cuddAddCmplRecur(dd,f);
356  } while (dd->reordered == 1);
357  return(res);
358 
359 } /* end of Cudd_addCmpl */
Definition: cudd.h:278
int reordered
Definition: cuddInt.h:409
DdNode * cuddAddCmplRecur(DdManager *dd, DdNode *f)
Definition: cuddAddIte.c:562
DdNode* Cudd_addEvalConst ( DdManager dd,
DdNode f,
DdNode g 
)

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

Synopsis [Checks whether ADD g is constant whenever ADD f is 1.]

Description [Checks whether ADD g is constant whenever ADD f is 1. f must be a 0-1 ADD. Returns a pointer to the resulting ADD (which may or may not be constant) or DD_NON_CONSTANT. If f is identically 0, the check is assumed to be successful, and the background value is returned. No new nodes are created.]

SideEffects [None]

SeeAlso [Cudd_addIteConstant Cudd_addLeq]

Definition at line 260 of file cuddAddIte.c.

264 {
265  DdNode *zero;
266  DdNode *Fv,*Fnv,*Gv,*Gnv,*r,*t,*e;
267  unsigned int topf,topg;
268 
269 #ifdef DD_DEBUG
271 #endif
272 
273  statLine(dd);
274  /* Terminal cases. */
275  if (f == DD_ONE(dd) || cuddIsConstant(g)) {
276  return(g);
277  }
278  if (f == (zero = DD_ZERO(dd))) {
279  return(dd->background);
280  }
281 
282 #ifdef DD_DEBUG
283  assert(!cuddIsConstant(f));
284 #endif
285  /* From now on, f and g are known not to be constants. */
286 
287  topf = cuddI(dd,f->index);
288  topg = cuddI(dd,g->index);
289 
290  /* Check cache. */
292  if (r != NULL) {
293  return(r);
294  }
295 
296  /* Compute cofactors. */
297  if (topf <= topg) {
298  Fv = cuddT(f); Fnv = cuddE(f);
299  } else {
300  Fv = Fnv = f;
301  }
302  if (topg <= topf) {
303  Gv = cuddT(g); Gnv = cuddE(g);
304  } else {
305  Gv = Gnv = g;
306  }
307 
308  /* Recursive step. */
309  if (Fv != zero) {
310  t = Cudd_addEvalConst(dd,Fv,Gv);
311  if (t == DD_NON_CONSTANT || !cuddIsConstant(t)) {
313  return(DD_NON_CONSTANT);
314  }
315  if (Fnv != zero) {
316  e = Cudd_addEvalConst(dd,Fnv,Gnv);
317  if (e == DD_NON_CONSTANT || !cuddIsConstant(e) || t != e) {
319  return(DD_NON_CONSTANT);
320  }
321  }
323  return(t);
324  } else { /* Fnv must be != zero */
325  e = Cudd_addEvalConst(dd,Fnv,Gnv);
326  cuddCacheInsert2(dd, Cudd_addEvalConst, f, g, e);
327  return(e);
328  }
329 
330 } /* end of Cudd_addEvalConst */
Definition: cudd.h:278
void cuddCacheInsert2(DdManager *table, DD_CTFP op, DdNode *f, DdNode *g, DdNode *data)
Definition: cuddCache.c:277
DdNode * Cudd_addEvalConst(DdManager *dd, DdNode *f, DdNode *g)
Definition: cuddAddIte.c:260
#define statLine(dd)
Definition: cuddInt.h:1037
#define Cudd_IsComplement(node)
Definition: cudd.h:425
#define cuddIsConstant(node)
Definition: cuddInt.h:620
#define DD_ADD_EVAL_CONST_TAG
Definition: cuddInt.h:185
DdNode * cuddConstantLookup(DdManager *table, ptruint op, DdNode *f, DdNode *g, DdNode *h)
Definition: cuddCache.c:721
#define cuddT(node)
Definition: cuddInt.h:636
#define cuddI(dd, index)
Definition: cuddInt.h:686
DdHalfWord index
Definition: cudd.h:279
#define cuddE(node)
Definition: cuddInt.h:652
#define assert(ex)
Definition: util_old.h:213
#define DD_ONE(dd)
Definition: cuddInt.h:911
static DdNode * zero
Definition: cuddApa.c:100
DdNode * background
Definition: cuddInt.h:349
#define DD_NON_CONSTANT
Definition: cuddInt.h:123
#define DD_ZERO(dd)
Definition: cuddInt.h:927
DdNode* Cudd_addIte ( DdManager dd,
DdNode f,
DdNode g,
DdNode h 
)

AutomaticEnd Function********************************************************************

Synopsis [Implements ITE(f,g,h).]

Description [Implements ITE(f,g,h). This procedure assumes that f is a 0-1 ADD. Returns a pointer to the resulting ADD if successful; NULL otherwise.]

SideEffects [None]

SeeAlso [Cudd_bddIte Cudd_addIteConstant Cudd_addApply]

Definition at line 129 of file cuddAddIte.c.

134 {
135  DdNode *res;
136 
137  do {
138  dd->reordered = 0;
139  res = cuddAddIteRecur(dd,f,g,h);
140  } while (dd->reordered == 1);
141  return(res);
142 
143 } /* end of Cudd_addIte */
Definition: cudd.h:278
int reordered
Definition: cuddInt.h:409
DdNode * cuddAddIteRecur(DdManager *dd, DdNode *f, DdNode *g, DdNode *h)
Definition: cuddAddIte.c:445
DdNode* Cudd_addIteConstant ( DdManager dd,
DdNode f,
DdNode g,
DdNode h 
)

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

Synopsis [Implements ITEconstant for ADDs.]

Description [Implements ITEconstant for ADDs. f must be a 0-1 ADD. Returns a pointer to the resulting ADD (which may or may not be constant) or DD_NON_CONSTANT. No new nodes are created. This function can be used, for instance, to check that g has a constant value (specified by h) whenever f is 1. If the constant value is unknown, then one should use Cudd_addEvalConst.]

SideEffects [None]

SeeAlso [Cudd_addIte Cudd_addEvalConst Cudd_bddIteConstant]

Definition at line 163 of file cuddAddIte.c.

168 {
169  DdNode *one,*zero;
170  DdNode *Fv,*Fnv,*Gv,*Gnv,*Hv,*Hnv,*r,*t,*e;
171  unsigned int topf,topg,toph,v;
172 
173  statLine(dd);
174  /* Trivial cases. */
175  if (f == (one = DD_ONE(dd))) { /* ITE(1,G,H) = G */
176  return(g);
177  }
178  if (f == (zero = DD_ZERO(dd))) { /* ITE(0,G,H) = H */
179  return(h);
180  }
181 
182  /* From now on, f is known not to be a constant. */
183  addVarToConst(f,&g,&h,one,zero);
184 
185  /* Check remaining one variable cases. */
186  if (g == h) { /* ITE(F,G,G) = G */
187  return(g);
188  }
189  if (cuddIsConstant(g) && cuddIsConstant(h)) {
190  return(DD_NON_CONSTANT);
191  }
192 
193  topf = cuddI(dd,f->index);
194  topg = cuddI(dd,g->index);
195  toph = cuddI(dd,h->index);
196  v = ddMin(topg,toph);
197 
198  /* ITE(F,G,H) = (x,G,H) (non constant) if F = (x,1,0), x < top(G,H). */
199  if (topf < v && cuddIsConstant(cuddT(f)) && cuddIsConstant(cuddE(f))) {
200  return(DD_NON_CONSTANT);
201  }
202 
203  /* Check cache. */
205  if (r != NULL) {
206  return(r);
207  }
208 
209  /* Compute cofactors. */
210  if (topf <= v) {
211  v = ddMin(topf,v); /* v = top_var(F,G,H) */
212  Fv = cuddT(f); Fnv = cuddE(f);
213  } else {
214  Fv = Fnv = f;
215  }
216  if (topg == v) {
217  Gv = cuddT(g); Gnv = cuddE(g);
218  } else {
219  Gv = Gnv = g;
220  }
221  if (toph == v) {
222  Hv = cuddT(h); Hnv = cuddE(h);
223  } else {
224  Hv = Hnv = h;
225  }
226 
227  /* Recursive step. */
228  t = Cudd_addIteConstant(dd,Fv,Gv,Hv);
229  if (t == DD_NON_CONSTANT || !cuddIsConstant(t)) {
231  return(DD_NON_CONSTANT);
232  }
233  e = Cudd_addIteConstant(dd,Fnv,Gnv,Hnv);
234  if (e == DD_NON_CONSTANT || !cuddIsConstant(e) || t != e) {
236  return(DD_NON_CONSTANT);
237  }
238  cuddCacheInsert(dd, DD_ADD_ITE_CONSTANT_TAG, f, g, h, t);
239  return(t);
240 
241 } /* end of Cudd_addIteConstant */
DdNode * Cudd_addIteConstant(DdManager *dd, DdNode *f, DdNode *g, DdNode *h)
Definition: cuddAddIte.c:163
Definition: cudd.h:278
static void addVarToConst(DdNode *f, DdNode **gp, DdNode **hp, DdNode *one, DdNode *zero)
Definition: cuddAddIte.c:625
#define DD_ADD_ITE_CONSTANT_TAG
Definition: cuddInt.h:184
void cuddCacheInsert(DdManager *table, ptruint op, DdNode *f, DdNode *g, DdNode *h, DdNode *data)
Definition: cuddCache.c:222
#define statLine(dd)
Definition: cuddInt.h:1037
static DdNode * one
Definition: cuddDecomp.c:112
#define cuddIsConstant(node)
Definition: cuddInt.h:620
#define ddMin(x, y)
Definition: cuddInt.h:818
DdNode * cuddConstantLookup(DdManager *table, ptruint op, DdNode *f, DdNode *g, DdNode *h)
Definition: cuddCache.c:721
#define cuddT(node)
Definition: cuddInt.h:636
#define cuddI(dd, index)
Definition: cuddInt.h:686
DdHalfWord index
Definition: cudd.h:279
#define cuddE(node)
Definition: cuddInt.h:652
#define DD_ONE(dd)
Definition: cuddInt.h:911
static DdNode * zero
Definition: cuddApa.c:100
#define DD_NON_CONSTANT
Definition: cuddInt.h:123
#define DD_ZERO(dd)
Definition: cuddInt.h:927
int Cudd_addLeq ( DdManager dd,
DdNode f,
DdNode g 
)

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

Synopsis [Determines whether f is less than or equal to g.]

Description [Returns 1 if f is less than or equal to g; 0 otherwise. No new nodes are created. This procedure works for arbitrary ADDs. For 0-1 ADDs Cudd_addEvalConst is more efficient.]

SideEffects [None]

SeeAlso [Cudd_addIteConstant Cudd_addEvalConst Cudd_bddLeq]

Definition at line 376 of file cuddAddIte.c.

380 {
381  DdNode *tmp, *fv, *fvn, *gv, *gvn;
382  unsigned int topf, topg, res;
383 
384  /* Terminal cases. */
385  if (f == g) return(1);
386 
387  statLine(dd);
388  if (cuddIsConstant(f)) {
389  if (cuddIsConstant(g)) return(cuddV(f) <= cuddV(g));
390  if (f == DD_MINUS_INFINITY(dd)) return(1);
391  if (f == DD_PLUS_INFINITY(dd)) return(0); /* since f != g */
392  }
393  if (g == DD_PLUS_INFINITY(dd)) return(1);
394  if (g == DD_MINUS_INFINITY(dd)) return(0); /* since f != g */
395 
396  /* Check cache. */
397  tmp = cuddCacheLookup2(dd,(DD_CTFP)Cudd_addLeq,f,g);
398  if (tmp != NULL) {
399  return(tmp == DD_ONE(dd));
400  }
401 
402  /* Compute cofactors. One of f and g is not constant. */
403  topf = cuddI(dd,f->index);
404  topg = cuddI(dd,g->index);
405  if (topf <= topg) {
406  fv = cuddT(f); fvn = cuddE(f);
407  } else {
408  fv = fvn = f;
409  }
410  if (topg <= topf) {
411  gv = cuddT(g); gvn = cuddE(g);
412  } else {
413  gv = gvn = g;
414  }
415 
416  res = Cudd_addLeq(dd,fvn,gvn) && Cudd_addLeq(dd,fv,gv);
417 
418  /* Store result in cache and return. */
420  Cudd_NotCond(DD_ONE(dd),res==0));
421  return(res);
422 
423 } /* end of Cudd_addLeq */
Definition: cudd.h:278
void cuddCacheInsert2(DdManager *table, DD_CTFP op, DdNode *f, DdNode *g, DdNode *data)
Definition: cuddCache.c:277
DdNode *(* DD_CTFP)(DdManager *, DdNode *, DdNode *)
Definition: cudd.h:321
#define statLine(dd)
Definition: cuddInt.h:1037
#define DD_MINUS_INFINITY(dd)
Definition: cuddInt.h:955
#define cuddV(node)
Definition: cuddInt.h:668
DdNode * cuddCacheLookup2(DdManager *table, DD_CTFP op, DdNode *f, DdNode *g)
Definition: cuddCache.c:502
int Cudd_addLeq(DdManager *dd, DdNode *f, DdNode *g)
Definition: cuddAddIte.c:376
#define cuddIsConstant(node)
Definition: cuddInt.h:620
#define cuddT(node)
Definition: cuddInt.h:636
#define cuddI(dd, index)
Definition: cuddInt.h:686
DdHalfWord index
Definition: cudd.h:279
#define cuddE(node)
Definition: cuddInt.h:652
#define Cudd_NotCond(node, c)
Definition: cudd.h:383
#define DD_PLUS_INFINITY(dd)
Definition: cuddInt.h:941
#define DD_ONE(dd)
Definition: cuddInt.h:911
DdNode* cuddAddCmplRecur ( DdManager dd,
DdNode f 
)

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

Synopsis [Performs the recursive step of Cudd_addCmpl.]

Description [Performs the recursive step of Cudd_addCmpl. Returns a pointer to the resulting ADD if successful; NULL otherwise.]

SideEffects [None]

SeeAlso [Cudd_addCmpl]

Definition at line 562 of file cuddAddIte.c.

565 {
566  DdNode *one,*zero;
567  DdNode *r,*Fv,*Fnv,*t,*e;
568 
569  statLine(dd);
570  one = DD_ONE(dd);
571  zero = DD_ZERO(dd);
572 
573  if (cuddIsConstant(f)) {
574  if (f == zero) {
575  return(one);
576  } else {
577  return(zero);
578  }
579  }
580  r = cuddCacheLookup1(dd,Cudd_addCmpl,f);
581  if (r != NULL) {
582  return(r);
583  }
584  Fv = cuddT(f);
585  Fnv = cuddE(f);
586  t = cuddAddCmplRecur(dd,Fv);
587  if (t == NULL) return(NULL);
588  cuddRef(t);
589  e = cuddAddCmplRecur(dd,Fnv);
590  if (e == NULL) {
591  Cudd_RecursiveDeref(dd,t);
592  return(NULL);
593  }
594  cuddRef(e);
595  r = (t == e) ? t : cuddUniqueInter(dd,(int)f->index,t,e);
596  if (r == NULL) {
597  Cudd_RecursiveDeref(dd, t);
598  Cudd_RecursiveDeref(dd, e);
599  return(NULL);
600  }
601  cuddDeref(t);
602  cuddDeref(e);
604  return(r);
605 
606 } /* end of cuddAddCmplRecur */
#define cuddRef(n)
Definition: cuddInt.h:584
#define cuddDeref(n)
Definition: cuddInt.h:604
void Cudd_RecursiveDeref(DdManager *table, DdNode *n)
Definition: cuddRef.c:154
Definition: cudd.h:278
DdNode * Cudd_addCmpl(DdManager *dd, DdNode *f)
Definition: cuddAddIte.c:347
#define statLine(dd)
Definition: cuddInt.h:1037
DdNode * cuddCacheLookup1(DdManager *table, DD_CTFP1 op, DdNode *f)
Definition: cuddCache.c:556
static DdNode * one
Definition: cuddDecomp.c:112
#define cuddIsConstant(node)
Definition: cuddInt.h:620
#define cuddT(node)
Definition: cuddInt.h:636
DdHalfWord index
Definition: cudd.h:279
#define cuddE(node)
Definition: cuddInt.h:652
#define DD_ONE(dd)
Definition: cuddInt.h:911
DdNode * cuddUniqueInter(DdManager *unique, int index, DdNode *T, DdNode *E)
Definition: cuddTable.c:1128
static DdNode * zero
Definition: cuddApa.c:100
void cuddCacheInsert1(DdManager *table, DD_CTFP1 op, DdNode *f, DdNode *data)
Definition: cuddCache.c:323
DdNode * cuddAddCmplRecur(DdManager *dd, DdNode *f)
Definition: cuddAddIte.c:562
#define DD_ZERO(dd)
Definition: cuddInt.h:927
DdNode* cuddAddIteRecur ( DdManager dd,
DdNode f,
DdNode g,
DdNode h 
)

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

Synopsis [Implements the recursive step of Cudd_addIte(f,g,h).]

Description [Implements the recursive step of Cudd_addIte(f,g,h). Returns a pointer to the resulting ADD if successful; NULL otherwise.]

SideEffects [None]

SeeAlso [Cudd_addIte]

Definition at line 445 of file cuddAddIte.c.

450 {
451  DdNode *one,*zero;
452  DdNode *r,*Fv,*Fnv,*Gv,*Gnv,*Hv,*Hnv,*t,*e;
453  unsigned int topf,topg,toph,v;
454  int index = -1;
455 
456  statLine(dd);
457  /* Trivial cases. */
458 
459  /* One variable cases. */
460  if (f == (one = DD_ONE(dd))) { /* ITE(1,G,H) = G */
461  return(g);
462  }
463  if (f == (zero = DD_ZERO(dd))) { /* ITE(0,G,H) = H */
464  return(h);
465  }
466 
467  /* From now on, f is known to not be a constant. */
468  addVarToConst(f,&g,&h,one,zero);
469 
470  /* Check remaining one variable cases. */
471  if (g == h) { /* ITE(F,G,G) = G */
472  return(g);
473  }
474 
475  if (g == one) { /* ITE(F,1,0) = F */
476  if (h == zero) return(f);
477  }
478 
479  topf = cuddI(dd,f->index);
480  topg = cuddI(dd,g->index);
481  toph = cuddI(dd,h->index);
482  v = ddMin(topg,toph);
483 
484  /* A shortcut: ITE(F,G,H) = (x,G,H) if F=(x,1,0), x < top(G,H). */
485  if (topf < v && cuddT(f) == one && cuddE(f) == zero) {
486  r = cuddUniqueInter(dd,(int)f->index,g,h);
487  return(r);
488  }
489  if (topf < v && cuddT(f) == zero && cuddE(f) == one) {
490  r = cuddUniqueInter(dd,(int)f->index,h,g);
491  return(r);
492  }
493 
494  /* Check cache. */
495  r = cuddCacheLookup(dd,DD_ADD_ITE_TAG,f,g,h);
496  if (r != NULL) {
497  return(r);
498  }
499 
500  /* Compute cofactors. */
501  if (topf <= v) {
502  v = ddMin(topf,v); /* v = top_var(F,G,H) */
503  index = f->index;
504  Fv = cuddT(f); Fnv = cuddE(f);
505  } else {
506  Fv = Fnv = f;
507  }
508  if (topg == v) {
509  index = g->index;
510  Gv = cuddT(g); Gnv = cuddE(g);
511  } else {
512  Gv = Gnv = g;
513  }
514  if (toph == v) {
515  index = h->index;
516  Hv = cuddT(h); Hnv = cuddE(h);
517  } else {
518  Hv = Hnv = h;
519  }
520 
521  /* Recursive step. */
522  t = cuddAddIteRecur(dd,Fv,Gv,Hv);
523  if (t == NULL) return(NULL);
524  cuddRef(t);
525 
526  e = cuddAddIteRecur(dd,Fnv,Gnv,Hnv);
527  if (e == NULL) {
528  Cudd_RecursiveDeref(dd,t);
529  return(NULL);
530  }
531  cuddRef(e);
532 
533  r = (t == e) ? t : cuddUniqueInter(dd,index,t,e);
534  if (r == NULL) {
535  Cudd_RecursiveDeref(dd,t);
536  Cudd_RecursiveDeref(dd,e);
537  return(NULL);
538  }
539  cuddDeref(t);
540  cuddDeref(e);
541 
542  cuddCacheInsert(dd,DD_ADD_ITE_TAG,f,g,h,r);
543 
544  return(r);
545 
546 } /* end of cuddAddIteRecur */
#define cuddRef(n)
Definition: cuddInt.h:584
#define cuddDeref(n)
Definition: cuddInt.h:604
void Cudd_RecursiveDeref(DdManager *table, DdNode *n)
Definition: cuddRef.c:154
Definition: cudd.h:278
static void addVarToConst(DdNode *f, DdNode **gp, DdNode **hp, DdNode *one, DdNode *zero)
Definition: cuddAddIte.c:625
void cuddCacheInsert(DdManager *table, ptruint op, DdNode *f, DdNode *g, DdNode *h, DdNode *data)
Definition: cuddCache.c:222
#define DD_ADD_ITE_TAG
Definition: cuddInt.h:172
#define statLine(dd)
Definition: cuddInt.h:1037
static DdNode * one
Definition: cuddDecomp.c:112
#define ddMin(x, y)
Definition: cuddInt.h:818
#define cuddT(node)
Definition: cuddInt.h:636
#define cuddI(dd, index)
Definition: cuddInt.h:686
DdHalfWord index
Definition: cudd.h:279
#define cuddE(node)
Definition: cuddInt.h:652
DdNode * cuddAddIteRecur(DdManager *dd, DdNode *f, DdNode *g, DdNode *h)
Definition: cuddAddIte.c:445
#define DD_ONE(dd)
Definition: cuddInt.h:911
DdNode * cuddUniqueInter(DdManager *unique, int index, DdNode *T, DdNode *E)
Definition: cuddTable.c:1128
static DdNode * zero
Definition: cuddApa.c:100
DdNode * cuddCacheLookup(DdManager *table, ptruint op, DdNode *f, DdNode *g, DdNode *h)
Definition: cuddCache.c:369
#define DD_ZERO(dd)
Definition: cuddInt.h:927

Variable Documentation

ABC_NAMESPACE_IMPL_START char rcsid [] DD_UNUSED = "$Id: cuddAddIte.c,v 1.15 2004/08/13 18:04:45 fabio Exp $"
static

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

FileName [cuddAddIte.c]

PackageName [cudd]

Synopsis [ADD ITE function and satellites.]

Description [External procedures included in this module:

Internal procedures included in this module:

Static procedures included in this module:

]

Author [Fabio Somenzi]

Copyright [Copyright (c) 1995-2004, 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 90 of file cuddAddIte.c.