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.
175 lines
5.7 KiB
175 lines
5.7 KiB
6 years ago
|
/*========================================================================
|
||
|
Copyright (C) 1996-2002 by Jorn Lind-Nielsen
|
||
|
All rights reserved
|
||
|
|
||
|
Permission is hereby granted, without written agreement and without
|
||
|
license or royalty fees, to use, reproduce, prepare derivative
|
||
|
works, distribute, and display this software and its documentation
|
||
|
for any purpose, provided that (1) the above copyright notice and
|
||
|
the following two paragraphs appear in all copies of the source code
|
||
|
and (2) redistributions, including without limitation binaries,
|
||
|
reproduce these notices in the supporting documentation. Substantial
|
||
|
modifications to this software may be copyrighted by their authors
|
||
|
and need not follow the licensing terms described here, provided
|
||
|
that the new terms are clearly indicated in all files where they apply.
|
||
|
|
||
|
IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS
|
||
|
SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL,
|
||
|
INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS
|
||
|
SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE
|
||
|
ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||
|
|
||
|
JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING,
|
||
|
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||
|
FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
|
||
|
ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO
|
||
|
OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
|
||
|
MODIFICATIONS.
|
||
|
========================================================================*/
|
||
|
|
||
|
/*************************************************************************
|
||
|
$Header: /cvsroot/buddy/buddy/src/fdd.h,v 1.1.1.1 2004/06/25 13:22:40 haimcohen Exp $
|
||
|
FILE: fdd.h
|
||
|
DESCR: Finite domain data with BDDs
|
||
|
AUTH: Jorn Lind
|
||
|
DATE: (C) february 1999
|
||
|
*************************************************************************/
|
||
|
|
||
|
#ifndef _FDD_H
|
||
|
#define _FDD_H
|
||
|
|
||
|
#include "bdd.h"
|
||
|
|
||
|
|
||
|
#ifdef CPLUSPLUS
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
/* In file fdd.c */
|
||
|
|
||
|
extern int fdd_extdomain(int*, int);
|
||
|
extern int fdd_overlapdomain(int, int);
|
||
|
extern int fdd_overlapdomains(int*, int);
|
||
|
extern void fdd_clearall(void);
|
||
|
extern int fdd_domainnum(void);
|
||
|
extern int fdd_domainsize(int);
|
||
|
extern int fdd_varnum(int);
|
||
|
extern int* fdd_vars(int);
|
||
|
extern BDD fdd_ithvar(int, int);
|
||
|
extern int fdd_scanvar(BDD, int);
|
||
|
extern int* fdd_scanallvar(BDD);
|
||
|
extern BDD fdd_ithset(int);
|
||
|
extern BDD fdd_domain(int);
|
||
|
extern BDD fdd_equals(int, int);
|
||
|
extern bddfilehandler fdd_file_hook(bddfilehandler);
|
||
|
#ifdef CPLUSPLUS
|
||
|
extern bddstrmhandler fdd_strm_hook(bddstrmhandler);
|
||
|
#endif
|
||
|
extern void fdd_printset(BDD);
|
||
|
extern void fdd_fprintset(FILE*, BDD);
|
||
|
extern int fdd_scanset(BDD, int**, int*);
|
||
|
extern BDD fdd_makeset(int*, int);
|
||
|
extern int fdd_intaddvarblock(int, int, int);
|
||
|
extern int fdd_setpair(bddPair*, int, int);
|
||
|
extern int fdd_setpairs(bddPair*, int*, int*, int);
|
||
|
|
||
|
#ifdef CPLUSPLUS
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
/*************************************************************************
|
||
|
If this file is included from a C++ compiler then the following
|
||
|
classes, wrappers and hacks are supplied.
|
||
|
*************************************************************************/
|
||
|
#ifdef CPLUSPLUS
|
||
|
|
||
|
/* FDD extensions */
|
||
|
|
||
|
inline bdd fdd_ithvarpp(int var, int val)
|
||
|
{ return fdd_ithvar(var, val); }
|
||
|
|
||
|
inline bdd fdd_ithsetpp(int var)
|
||
|
{ return fdd_ithset(var); }
|
||
|
|
||
|
inline bdd fdd_domainpp(int var)
|
||
|
{ return fdd_domain(var); }
|
||
|
|
||
|
inline int fdd_scanvar(const bdd &r, int var)
|
||
|
{ return fdd_scanvar(r.root, var); }
|
||
|
|
||
|
inline int* fdd_scanallvar(const bdd &r)
|
||
|
{ return fdd_scanallvar(r.root); }
|
||
|
|
||
|
inline bdd fdd_equalspp(int left, int right)
|
||
|
{ return fdd_equals(left, right); }
|
||
|
|
||
|
inline void fdd_printset(const bdd &r)
|
||
|
{ fdd_printset(r.root); }
|
||
|
|
||
|
inline void fdd_fprintset(FILE* ofile, const bdd &r)
|
||
|
{ fdd_fprintset(ofile, r.root); }
|
||
|
|
||
|
inline int fdd_scanset(const bdd &r, int *&v, int &n)
|
||
|
{ return fdd_scanset(r.root, &v, &n); }
|
||
|
|
||
|
inline bdd fdd_makesetpp(int *v, int n)
|
||
|
{ return fdd_makeset(v,n); }
|
||
|
|
||
|
#if 0
|
||
|
inline bdd* fdd_conpp(int bitnum, int var)
|
||
|
{ return fdd_transfer( bitnum, fdd_con(bitnum, var) ); }
|
||
|
|
||
|
inline bdd* fdd_varpp(int bitnum, int var)
|
||
|
{ return fdd_transfer( bitnum, fdd_var(bitnum, var) ); }
|
||
|
|
||
|
extern int fdd_isconst(int bitnum, bdd *e);
|
||
|
extern int fdd_val(int bitnum, bdd *e);
|
||
|
|
||
|
inline bdd* fdd_add(int bitnum, bdd *left, bdd *right)
|
||
|
{ return fdd_termopr(bitnum, left, right,bdd::fddAdd); }
|
||
|
|
||
|
inline bdd* fdd_sub(int bitnum, bdd *left, bdd *right)
|
||
|
{ return fdd_termopr(bitnum, left, right,bdd::fddSub); }
|
||
|
|
||
|
inline bdd* fdd_shl(int bitnum, bdd *expr, bdd c)
|
||
|
{ return fdd_shift(bitnum, expr, c, bdd::fddShl); }
|
||
|
|
||
|
inline bdd* fdd_shr(int bitnum, bdd *expr, bdd c)
|
||
|
{ return fdd_shift(bitnum, expr, c, bdd::fddShr); }
|
||
|
|
||
|
inline bdd fdd_lth(int bitnum, bdd *left, bdd *right)
|
||
|
{ return fdd_relopr(bitnum, left, right, bdd::fddLth); }
|
||
|
|
||
|
inline bdd fdd_lte(int bitnum, bdd *left, bdd *right)
|
||
|
{ return fdd_relopr(bitnum, left, right, bdd::fddLte); }
|
||
|
|
||
|
inline bdd fdd_gth(int bitnum, bdd *left, bdd *right)
|
||
|
{ return fdd_relopr(bitnum, left, right, bdd::fddGth); }
|
||
|
|
||
|
inline bdd fdd_gte(int bitnum, bdd *left, bdd *right)
|
||
|
{ return fdd_relopr(bitnum, left, right, bdd::fddGte); }
|
||
|
|
||
|
inline bdd fdd_equ(int bitnum, bdd *left, bdd *right)
|
||
|
{ return fdd_relopr(bitnum, left, right, bdd::fddEqu); }
|
||
|
|
||
|
inline bdd fdd_neq(int bitnum, bdd *left, bdd *right)
|
||
|
{ return fdd_relopr(bitnum, left, right, bdd::fddNeq); }
|
||
|
#endif
|
||
|
|
||
|
/* Hacks to allow for overloading of return-types only */
|
||
|
#define fdd_ithvar fdd_ithvarpp
|
||
|
#define fdd_ithset fdd_ithsetpp
|
||
|
#define fdd_domain fdd_domainpp
|
||
|
#define fdd_equals fdd_equalspp
|
||
|
#define fdd_makeset fdd_makesetpp
|
||
|
#define fdd_con fdd_conpp
|
||
|
#define fdd_var fdd_varpp
|
||
|
|
||
|
|
||
|
#endif /* CPLUSPLUS */
|
||
|
|
||
|
#endif /* _FDD_H */
|
||
|
|
||
|
|
||
|
/* EOF */
|