This patch addresses the BuDDy part of #396, reported by Florian Renkin and Reed Oei. * src/kernel.c, src/kernel.h: Declare a bddrecstack and associated macros. Resize it when new variable are declared. * src/cache.h: Add a BddCache_index macro. * src/bddop.c (not_rec, apply_rec, quant_rec, appquant_rec, support_rec, ite_rec, compose_rec, restrict_rec, satone_rec, satoneset_rec): Rewrite using this stack to get rid of the recursion.
75 lines
2.7 KiB
C
75 lines
2.7 KiB
C
/*========================================================================
|
|
Copyright (C) 1996-2002, 2020 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: /Volumes/CVS/repository/spot/spot/buddy/src/cache.h,v 1.2 2003/05/05 13:45:05 aduret Exp $
|
|
FILE: cache.h
|
|
DESCR: Cache class for caching apply/exist etc. results
|
|
AUTH: Jorn Lind
|
|
DATE: (C) june 1997
|
|
*************************************************************************/
|
|
|
|
#ifndef _CACHE_H
|
|
#define _CACHE_H
|
|
|
|
|
|
typedef union
|
|
{
|
|
struct {
|
|
int a;
|
|
int c;
|
|
int b;
|
|
int res;
|
|
} i;
|
|
struct {
|
|
int a;
|
|
int c;
|
|
double res;
|
|
} d;
|
|
} BddCacheData;
|
|
|
|
typedef struct
|
|
{
|
|
BddCacheData *table;
|
|
int tablesize; /* a power of 2 */
|
|
} BddCache;
|
|
|
|
|
|
extern int BddCache_init(BddCache *, int);
|
|
extern void BddCache_done(BddCache *);
|
|
extern int BddCache_resize(BddCache *, int);
|
|
extern void BddCache_reset(BddCache *);
|
|
|
|
#define BddCache_lookup(cache, hash) (&(cache)->table[hash & ((cache)->tablesize - 1)])
|
|
#define BddCache_index(cache, hash, index) (&(cache)->table[index = (hash & ((cache)->tablesize - 1))])
|
|
|
|
#endif /* _CACHE_H */
|
|
|
|
|
|
/* EOF */
|