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.
768 lines
28 KiB
768 lines
28 KiB
/**CHeaderFile***************************************************************
|
|
|
|
FileName [cuddObj.hh]
|
|
|
|
PackageName [cudd]
|
|
|
|
Synopsis [Class definitions for C++ object-oriented encapsulation of
|
|
CUDD.]
|
|
|
|
Description [Class definitions for C++ object-oriented encapsulation of
|
|
CUDD.]
|
|
|
|
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.]
|
|
|
|
Revision [$Id: cuddObj.hh,v 1.13 2012/02/05 01:06:40 fabio Exp fabio $]
|
|
|
|
******************************************************************************/
|
|
|
|
#ifndef _CPPCUDD
|
|
#define _CPPCUDD
|
|
|
|
#if defined (__GNUC__)
|
|
#if (__GNUC__ >2 || __GNUC_MINOR__ >=7) && !defined(UNUSED)
|
|
#define UNUSED __attribute__ ((unused))
|
|
#else
|
|
#define UNUSED
|
|
#endif
|
|
#else
|
|
#define UNUSED
|
|
#endif
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* Nested includes */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
#include <cstdio>
|
|
#include <string>
|
|
#include <vector>
|
|
#include "cudd.h"
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* Type definitions */
|
|
/*---------------------------------------------------------------------------*/
|
|
class BDD;
|
|
class ADD;
|
|
class ZDD;
|
|
class Cudd;
|
|
|
|
typedef void (*PFC)(std::string); // handler function type
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* Class definitions */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
/**Class***********************************************************************
|
|
|
|
Synopsis [Class for reference counting of CUDD managers.]
|
|
|
|
Description []
|
|
|
|
SeeAlso [Cudd DD ABDD ADD BDD ZDD]
|
|
|
|
******************************************************************************/
|
|
class Capsule {
|
|
friend class DD;
|
|
friend class ABDD;
|
|
friend class BDD;
|
|
friend class ADD;
|
|
friend class ZDD;
|
|
friend class Cudd;
|
|
private:
|
|
DdManager *manager;
|
|
PFC errorHandler;
|
|
PFC timeoutHandler;
|
|
bool verbose;
|
|
int ref;
|
|
};
|
|
|
|
|
|
/**Class***********************************************************************
|
|
|
|
Synopsis [Base class for all decision diagrams in CUDD.]
|
|
|
|
Description []
|
|
|
|
SeeAlso [Cudd ABDD ADD BDD ZDD]
|
|
|
|
******************************************************************************/
|
|
class DD {
|
|
friend class ABDD;
|
|
friend class BDD;
|
|
friend class ADD;
|
|
friend class ZDD;
|
|
private:
|
|
Capsule *p;
|
|
DdNode *node;
|
|
inline DdManager * checkSameManager(const DD &other) const;
|
|
inline void checkReturnValue(const DdNode *result) const;
|
|
inline void checkReturnValue(const int result, const int expected = 1)
|
|
const;
|
|
public:
|
|
DD();
|
|
DD(Capsule *cap, DdNode *ddNode);
|
|
DD(Cudd const & manager, DdNode *ddNode);
|
|
DD(const DD &from);
|
|
virtual ~DD();
|
|
operator bool() const { return node; }
|
|
DdManager *manager() const;
|
|
DdNode * getNode() const;
|
|
DdNode * getRegularNode() const;
|
|
int nodeCount() const;
|
|
unsigned int NodeReadIndex() const;
|
|
|
|
}; // DD
|
|
|
|
|
|
/**Class***********************************************************************
|
|
|
|
Synopsis [Class for ADDs and BDDs.]
|
|
|
|
Description []
|
|
|
|
SeeAlso [Cudd ADD BDD]
|
|
|
|
******************************************************************************/
|
|
class ABDD : public DD {
|
|
friend class BDD;
|
|
friend class ADD;
|
|
friend class Cudd;
|
|
public:
|
|
ABDD();
|
|
ABDD(Capsule *cap, DdNode *bddNode);
|
|
ABDD(Cudd const & manager, DdNode *ddNode);
|
|
ABDD(const ABDD &from);
|
|
virtual ~ABDD();
|
|
bool operator==(const ABDD &other) const;
|
|
bool operator!=(const ABDD &other) const;
|
|
void print(int nvars, int verbosity = 1) const;
|
|
DdApaNumber ApaCountMinterm(int nvars, int * digits) const;
|
|
void ApaPrintMinterm(int nvars, FILE * fp = stdout) const;
|
|
void EpdPrintMinterm(int nvars, FILE * fp = stdout) const;
|
|
bool IsOne() const;
|
|
bool IsCube() const;
|
|
BDD FindEssential() const;
|
|
void PrintTwoLiteralClauses(char ** names, FILE * fp = stdout) const;
|
|
BDD ShortestPath(int * weight, int * support, int * length) const;
|
|
BDD LargestCube(int * length = 0) const;
|
|
int ShortestLength(int * weight) const;
|
|
bool EquivDC(const ABDD& G, const ABDD& D) const;
|
|
double * CofMinterm() const;
|
|
void PrintMinterm() const;
|
|
double CountMinterm(int nvars) const;
|
|
double CountPath() const;
|
|
BDD Support() const;
|
|
int SupportSize() const;
|
|
std::vector<unsigned int> SupportIndices() const;
|
|
void ClassifySupport(const ABDD& g, BDD* common, BDD* onlyF, BDD* onlyG)
|
|
const;
|
|
int CountLeaves() const;
|
|
DdGen * FirstCube(int ** cube, CUDD_VALUE_TYPE * value) const;
|
|
double Density(int nvars) const;
|
|
|
|
}; // ABDD
|
|
|
|
|
|
/**Class***********************************************************************
|
|
|
|
Synopsis [Class for BDDs.]
|
|
|
|
Description []
|
|
|
|
SeeAlso [Cudd]
|
|
|
|
******************************************************************************/
|
|
class BDD : public ABDD {
|
|
friend class Cudd;
|
|
public:
|
|
BDD();
|
|
BDD(Capsule *cap, DdNode *bddNode);
|
|
BDD(Cudd const & manager, DdNode *ddNode);
|
|
BDD(const BDD &from);
|
|
BDD operator=(const BDD& right);
|
|
bool operator<=(const BDD& other) const;
|
|
bool operator>=(const BDD& other) const;
|
|
bool operator<(const BDD& other) const;
|
|
bool operator>(const BDD& other) const;
|
|
BDD operator!() const;
|
|
BDD operator~() const;
|
|
BDD operator*(const BDD& other) const;
|
|
BDD operator*=(const BDD& other);
|
|
BDD operator&(const BDD& other) const;
|
|
BDD operator&=(const BDD& other);
|
|
BDD operator+(const BDD& other) const;
|
|
BDD operator+=(const BDD& other);
|
|
BDD operator|(const BDD& other) const;
|
|
BDD operator|=(const BDD& other);
|
|
BDD operator^(const BDD& other) const;
|
|
BDD operator^=(const BDD& other);
|
|
BDD operator-(const BDD& other) const;
|
|
BDD operator-=(const BDD& other);
|
|
bool IsZero() const;
|
|
BDD AndAbstract(const BDD& g, const BDD& cube, unsigned int limit = 0)
|
|
const;
|
|
BDD UnderApprox(
|
|
int numVars,
|
|
int threshold = 0,
|
|
bool safe = false,
|
|
double quality = 1.0) const;
|
|
BDD OverApprox(
|
|
int numVars,
|
|
int threshold = 0,
|
|
bool safe = false,
|
|
double quality = 1.0) const;
|
|
BDD RemapUnderApprox(int numVars, int threshold = 0, double quality = 1.0)
|
|
const;
|
|
BDD RemapOverApprox(int numVars, int threshold = 0, double quality = 1.0)
|
|
const;
|
|
BDD BiasedUnderApprox(const BDD& bias, int numVars, int threshold = 0,
|
|
double quality1 = 1.0, double quality0 = 1.0) const;
|
|
BDD BiasedOverApprox(const BDD& bias, int numVars, int threshold = 0,
|
|
double quality1 = 1.0, double quality0 = 1.0) const;
|
|
BDD ExistAbstract(const BDD& cube, unsigned int limit = 0) const;
|
|
BDD XorExistAbstract(const BDD& g, const BDD& cube) const;
|
|
BDD UnivAbstract(const BDD& cube) const;
|
|
BDD BooleanDiff(int x) const;
|
|
bool VarIsDependent(const BDD& var) const;
|
|
double Correlation(const BDD& g) const;
|
|
double CorrelationWeights(const BDD& g, double * prob) const;
|
|
BDD Ite(const BDD& g, const BDD& h, unsigned int limit = 0) const;
|
|
BDD IteConstant(const BDD& g, const BDD& h) const;
|
|
BDD Intersect(const BDD& g) const;
|
|
BDD And(const BDD& g, unsigned int limit = 0) const;
|
|
BDD Or(const BDD& g, unsigned int limit = 0) const;
|
|
BDD Nand(const BDD& g) const;
|
|
BDD Nor(const BDD& g) const;
|
|
BDD Xor(const BDD& g) const;
|
|
BDD Xnor(const BDD& g, unsigned int limit = 0) const;
|
|
bool Leq(const BDD& g) const;
|
|
ADD Add() const;
|
|
BDD Transfer(Cudd& destination) const;
|
|
BDD ClippingAnd(const BDD& g, int maxDepth, int direction) const;
|
|
BDD ClippingAndAbstract(const BDD& g, const BDD& cube, int maxDepth,
|
|
int direction) const;
|
|
BDD Cofactor(const BDD& g) const;
|
|
BDD Compose(const BDD& g, int v) const;
|
|
BDD Permute(int * permut) const;
|
|
BDD SwapVariables(std::vector<BDD> x, std::vector<BDD> y) const;
|
|
BDD AdjPermuteX(std::vector<BDD> x) const;
|
|
BDD VectorCompose(std::vector<BDD> vector) const;
|
|
void ApproxConjDecomp(BDD* g, BDD* h) const;
|
|
void ApproxDisjDecomp(BDD* g, BDD* h) const;
|
|
void IterConjDecomp(BDD* g, BDD* h) const;
|
|
void IterDisjDecomp(BDD* g, BDD* h) const;
|
|
void GenConjDecomp(BDD* g, BDD* h) const;
|
|
void GenDisjDecomp(BDD* g, BDD* h) const;
|
|
void VarConjDecomp(BDD* g, BDD* h) const;
|
|
void VarDisjDecomp(BDD* g, BDD* h) const;
|
|
bool IsVarEssential(int id, int phase) const;
|
|
BDD Constrain(const BDD& c) const;
|
|
BDD Restrict(const BDD& c) const;
|
|
BDD NPAnd(const BDD& g) const;
|
|
std::vector<BDD> ConstrainDecomp() const;
|
|
std::vector<BDD> CharToVect() const;
|
|
BDD LICompaction(const BDD& c) const;
|
|
BDD Squeeze(const BDD& u) const;
|
|
BDD Minimize(const BDD& c) const;
|
|
BDD SubsetCompress(int nvars, int threshold) const;
|
|
BDD SupersetCompress(int nvars, int threshold) const;
|
|
BDD LiteralSetIntersection(const BDD& g) const;
|
|
BDD PrioritySelect(std::vector<BDD> x, std::vector<BDD> y,
|
|
std::vector<BDD> z, const BDD& Pi, DD_PRFP Pifunc) const;
|
|
BDD CProjection(const BDD& Y) const;
|
|
int MinHammingDist(int *minterm, int upperBound) const;
|
|
BDD Eval(int * inputs) const;
|
|
BDD Decreasing(int i) const;
|
|
BDD Increasing(int i) const;
|
|
bool LeqUnless(const BDD& G, const BDD& D) const;
|
|
BDD MakePrime(const BDD& F) const;
|
|
BDD MaximallyExpand(const BDD& ub, const BDD& f);
|
|
BDD LargestPrimeUnate(const BDD& phases);
|
|
BDD SolveEqn(const BDD& Y, BDD* G, int ** yIndex, int n) const;
|
|
BDD VerifySol(BDD* G, int * yIndex, int n) const;
|
|
BDD SplitSet(std::vector<BDD> xVars, double m) const;
|
|
BDD SubsetHeavyBranch(int numVars, int threshold) const;
|
|
BDD SupersetHeavyBranch(int numVars, int threshold) const;
|
|
BDD SubsetShortPaths(int numVars, int threshold, bool hardlimit = false) const;
|
|
BDD SupersetShortPaths(int numVars, int threshold, bool hardlimit = false) const;
|
|
void PrintCover() const;
|
|
void PrintCover(const BDD& u) const;
|
|
int EstimateCofactor(int i, int phase) const;
|
|
int EstimateCofactorSimple(int i) const;
|
|
void PickOneCube(char * string) const;
|
|
BDD PickOneMinterm(std::vector<BDD> vars) const;
|
|
DdGen * FirstNode(BDD* fnode) const;
|
|
BDD zddIsop(const BDD& U, ZDD* zdd_I) const;
|
|
BDD Isop(const BDD& U) const;
|
|
ZDD PortToZdd() const;
|
|
|
|
}; // BDD
|
|
|
|
|
|
/**Class***********************************************************************
|
|
|
|
Synopsis [Class for ADDs.]
|
|
|
|
Description []
|
|
|
|
SeeAlso [Cudd]
|
|
|
|
******************************************************************************/
|
|
class ADD : public ABDD {
|
|
friend class Cudd;
|
|
public:
|
|
ADD();
|
|
ADD(Capsule *cap, DdNode *bddNode);
|
|
ADD(Cudd const & manager, DdNode *ddNode);
|
|
ADD(const ADD &from);
|
|
ADD operator=(const ADD& right);
|
|
// Relational operators
|
|
bool operator<=(const ADD& other) const;
|
|
bool operator>=(const ADD& other) const;
|
|
bool operator<(const ADD& other) const;
|
|
bool operator>(const ADD& other) const;
|
|
// Arithmetic operators
|
|
ADD operator-() const;
|
|
ADD operator*(const ADD& other) const;
|
|
ADD operator*=(const ADD& other);
|
|
ADD operator+(const ADD& other) const;
|
|
ADD operator+=(const ADD& other);
|
|
ADD operator-(const ADD& other) const;
|
|
ADD operator-=(const ADD& other);
|
|
// Logical operators
|
|
ADD operator~() const;
|
|
ADD operator&(const ADD& other) const;
|
|
ADD operator&=(const ADD& other);
|
|
ADD operator|(const ADD& other) const;
|
|
ADD operator|=(const ADD& other);
|
|
bool IsZero() const;
|
|
ADD ExistAbstract(const ADD& cube) const;
|
|
ADD UnivAbstract(const ADD& cube) const;
|
|
ADD OrAbstract(const ADD& cube) const;
|
|
ADD Plus(const ADD& g) const;
|
|
ADD Times(const ADD& g) const;
|
|
ADD Threshold(const ADD& g) const;
|
|
ADD SetNZ(const ADD& g) const;
|
|
ADD Divide(const ADD& g) const;
|
|
ADD Minus(const ADD& g) const;
|
|
ADD Minimum(const ADD& g) const;
|
|
ADD Maximum(const ADD& g) const;
|
|
ADD OneZeroMaximum(const ADD& g) const;
|
|
ADD Diff(const ADD& g) const;
|
|
ADD Agreement(const ADD& g) const;
|
|
ADD Or(const ADD& g) const;
|
|
ADD Nand(const ADD& g) const;
|
|
ADD Nor(const ADD& g) const;
|
|
ADD Xor(const ADD& g) const;
|
|
ADD Xnor(const ADD& g) const;
|
|
ADD Log() const;
|
|
ADD FindMax() const;
|
|
ADD FindMin() const;
|
|
ADD IthBit(int bit) const;
|
|
ADD ScalarInverse(const ADD& epsilon) const;
|
|
ADD Ite(const ADD& g, const ADD& h) const;
|
|
ADD IteConstant(const ADD& g, const ADD& h) const;
|
|
ADD EvalConst(const ADD& g) const;
|
|
bool Leq(const ADD& g) const;
|
|
ADD Cmpl() const;
|
|
ADD Negate() const;
|
|
ADD RoundOff(int N) const;
|
|
ADD Equals(const ADD& g) const;
|
|
ADD NotEquals(const ADD& g) const;
|
|
ADD LessThan(const ADD& g) const;
|
|
ADD LessThanOrEqual(const ADD& g) const;
|
|
ADD GreaterThan(const ADD& g) const;
|
|
ADD GreaterThanOrEqual(const ADD& g) const;
|
|
BDD BddThreshold(CUDD_VALUE_TYPE value) const;
|
|
BDD BddStrictThreshold(CUDD_VALUE_TYPE value) const;
|
|
BDD BddInterval(CUDD_VALUE_TYPE lower, CUDD_VALUE_TYPE upper) const;
|
|
BDD BddIthBit(int bit) const;
|
|
BDD BddPattern() const;
|
|
ADD Cofactor(const ADD& g) const;
|
|
ADD Compose(const ADD& g, int v) const;
|
|
ADD Permute(int * permut) const;
|
|
ADD SwapVariables(std::vector<ADD> x, std::vector<ADD> y) const;
|
|
ADD VectorCompose(std::vector<ADD> vector) const;
|
|
ADD NonSimCompose(std::vector<ADD> vector) const;
|
|
ADD Constrain(const ADD& c) const;
|
|
ADD Restrict(const ADD& c) const;
|
|
ADD MatrixMultiply(const ADD& B, std::vector<ADD> z) const;
|
|
ADD TimesPlus(const ADD& B, std::vector<ADD> z) const;
|
|
ADD Triangle(const ADD& g, std::vector<ADD> z) const;
|
|
ADD Eval(int * inputs) const;
|
|
bool EqualSupNorm(const ADD& g, CUDD_VALUE_TYPE tolerance, int pr) const;
|
|
|
|
}; // ADD
|
|
|
|
|
|
/**Class***********************************************************************
|
|
|
|
Synopsis [Class for ZDDs.]
|
|
|
|
Description []
|
|
|
|
SeeAlso [Cudd]
|
|
|
|
******************************************************************************/
|
|
class ZDD : public DD {
|
|
friend class Cudd;
|
|
public:
|
|
ZDD(Capsule *cap, DdNode *bddNode);
|
|
ZDD();
|
|
ZDD(const ZDD &from);
|
|
~ZDD();
|
|
ZDD operator=(const ZDD& right);
|
|
bool operator==(const ZDD& other) const;
|
|
bool operator!=(const ZDD& other) const;
|
|
bool operator<=(const ZDD& other) const;
|
|
bool operator>=(const ZDD& other) const;
|
|
bool operator<(const ZDD& other) const;
|
|
bool operator>(const ZDD& other) const;
|
|
void print(int nvars, int verbosity = 1) const;
|
|
ZDD operator*(const ZDD& other) const;
|
|
ZDD operator*=(const ZDD& other);
|
|
ZDD operator&(const ZDD& other) const;
|
|
ZDD operator&=(const ZDD& other);
|
|
ZDD operator+(const ZDD& other) const;
|
|
ZDD operator+=(const ZDD& other);
|
|
ZDD operator|(const ZDD& other) const;
|
|
ZDD operator|=(const ZDD& other);
|
|
ZDD operator-(const ZDD& other) const;
|
|
ZDD operator-=(const ZDD& other);
|
|
int Count() const;
|
|
double CountDouble() const;
|
|
ZDD Product(const ZDD& g) const;
|
|
ZDD UnateProduct(const ZDD& g) const;
|
|
ZDD WeakDiv(const ZDD& g) const;
|
|
ZDD Divide(const ZDD& g) const;
|
|
ZDD WeakDivF(const ZDD& g) const;
|
|
ZDD DivideF(const ZDD& g) const;
|
|
double CountMinterm(int path) const;
|
|
BDD PortToBdd() const;
|
|
ZDD Ite(const ZDD& g, const ZDD& h) const;
|
|
ZDD Union(const ZDD& Q) const;
|
|
ZDD Intersect(const ZDD& Q) const;
|
|
ZDD Diff(const ZDD& Q) const;
|
|
ZDD DiffConst(const ZDD& Q) const;
|
|
ZDD Subset1(int var) const;
|
|
ZDD Subset0(int var) const;
|
|
ZDD Change(int var) const;
|
|
void PrintMinterm() const;
|
|
void PrintCover() const;
|
|
BDD Support() const;
|
|
|
|
}; // ZDD
|
|
|
|
|
|
/**Class***********************************************************************
|
|
|
|
Synopsis [Class for CUDD managers.]
|
|
|
|
Description []
|
|
|
|
SeeAlso [DD]
|
|
|
|
******************************************************************************/
|
|
class Cudd {
|
|
friend class DD;
|
|
friend class ABDD;
|
|
friend class BDD;
|
|
friend class ADD;
|
|
friend class ZDD;
|
|
private:
|
|
Capsule *p;
|
|
public:
|
|
Cudd(
|
|
unsigned int numVars = 0,
|
|
unsigned int numVarsZ = 0,
|
|
unsigned int numSlots = CUDD_UNIQUE_SLOTS,
|
|
unsigned int cacheSize = CUDD_CACHE_SLOTS,
|
|
unsigned long maxMemory = 0);
|
|
Cudd(const Cudd& x);
|
|
~Cudd();
|
|
PFC setHandler(PFC newHandler) const;
|
|
PFC getHandler() const;
|
|
PFC setTimeoutHandler(PFC newHandler) const;
|
|
PFC getTimeoutHandler() const;
|
|
DdManager *getManager() const {return p->manager;}
|
|
inline void makeVerbose() const {p->verbose = 1;}
|
|
inline void makeTerse() {p->verbose = 0;}
|
|
inline bool isVerbose() const {return p->verbose;}
|
|
inline void checkReturnValue(const DdNode *result) const;
|
|
inline void checkReturnValue(const int result) const;
|
|
Cudd& operator=(const Cudd& right);
|
|
void info() const;
|
|
BDD bddVar() const;
|
|
BDD bddVar(int index) const;
|
|
BDD bddOne() const;
|
|
BDD bddZero() const;
|
|
ADD addVar() const;
|
|
ADD addVar(int index) const;
|
|
ADD addOne() const;
|
|
ADD addZero() const;
|
|
ADD constant(CUDD_VALUE_TYPE c) const;
|
|
ADD plusInfinity() const;
|
|
ADD minusInfinity() const;
|
|
ZDD zddVar(int index) const;
|
|
ZDD zddOne(int i) const;
|
|
ZDD zddZero() const;
|
|
ADD addNewVarAtLevel(int level) const;
|
|
BDD bddNewVarAtLevel(int level) const;
|
|
void zddVarsFromBddVars(int multiplicity) const;
|
|
unsigned long ReadStartTime() const;
|
|
unsigned long ReadElapsedTime() const;
|
|
void SetStartTime(unsigned long st) const;
|
|
void ResetStartTime() const;
|
|
unsigned long ReadTimeLimit() const;
|
|
void SetTimeLimit(unsigned long tl) const;
|
|
void UpdateTimeLimit() const;
|
|
void IncreaseTimeLimit(unsigned long increase) const;
|
|
void UnsetTimeLimit() const;
|
|
bool TimeLimited() const;
|
|
void AutodynEnable(Cudd_ReorderingType method) const;
|
|
void AutodynDisable() const;
|
|
bool ReorderingStatus(Cudd_ReorderingType * method) const;
|
|
void AutodynEnableZdd(Cudd_ReorderingType method) const;
|
|
void AutodynDisableZdd() const;
|
|
bool ReorderingStatusZdd(Cudd_ReorderingType * method) const;
|
|
bool zddRealignmentEnabled() const;
|
|
void zddRealignEnable() const;
|
|
void zddRealignDisable() const;
|
|
bool bddRealignmentEnabled() const;
|
|
void bddRealignEnable() const;
|
|
void bddRealignDisable() const;
|
|
ADD background() const;
|
|
void SetBackground(ADD bg) const;
|
|
unsigned int ReadCacheSlots() const;
|
|
double ReadCacheUsedSlots() const;
|
|
double ReadCacheLookUps() const;
|
|
double ReadCacheHits() const;
|
|
unsigned int ReadMinHit() const;
|
|
void SetMinHit(unsigned int hr) const;
|
|
unsigned int ReadLooseUpTo() const;
|
|
void SetLooseUpTo(unsigned int lut) const;
|
|
unsigned int ReadMaxCache() const;
|
|
unsigned int ReadMaxCacheHard() const;
|
|
void SetMaxCacheHard(unsigned int mc) const;
|
|
int ReadSize() const;
|
|
int ReadZddSize() const;
|
|
unsigned int ReadSlots() const;
|
|
unsigned int ReadKeys() const;
|
|
unsigned int ReadDead() const;
|
|
unsigned int ReadMinDead() const;
|
|
unsigned int ReadReorderings() const;
|
|
unsigned int ReadMaxReorderings() const;
|
|
void SetMaxReorderings(unsigned int mr) const;
|
|
long ReadReorderingTime() const;
|
|
int ReadGarbageCollections() const;
|
|
long ReadGarbageCollectionTime() const;
|
|
int ReadSiftMaxVar() const;
|
|
void SetSiftMaxVar(int smv) const;
|
|
int ReadSiftMaxSwap() const;
|
|
void SetSiftMaxSwap(int sms) const;
|
|
double ReadMaxGrowth() const;
|
|
void SetMaxGrowth(double mg) const;
|
|
MtrNode * ReadTree() const;
|
|
void SetTree(MtrNode * tree) const;
|
|
void FreeTree() const;
|
|
MtrNode * ReadZddTree() const;
|
|
void SetZddTree(MtrNode * tree) const;
|
|
void FreeZddTree() const;
|
|
int ReadPerm(int i) const;
|
|
int ReadPermZdd(int i) const;
|
|
int ReadInvPerm(int i) const;
|
|
int ReadInvPermZdd(int i) const;
|
|
BDD ReadVars(int i) const;
|
|
CUDD_VALUE_TYPE ReadEpsilon() const;
|
|
void SetEpsilon(CUDD_VALUE_TYPE ep) const;
|
|
Cudd_AggregationType ReadGroupcheck() const;
|
|
void SetGroupcheck(Cudd_AggregationType gc) const;
|
|
bool GarbageCollectionEnabled() const;
|
|
void EnableGarbageCollection() const;
|
|
void DisableGarbageCollection() const;
|
|
bool DeadAreCounted() const;
|
|
void TurnOnCountDead() const;
|
|
void TurnOffCountDead() const;
|
|
int ReadRecomb() const;
|
|
void SetRecomb(int recomb) const;
|
|
int ReadSymmviolation() const;
|
|
void SetSymmviolation(int symmviolation) const;
|
|
int ReadArcviolation() const;
|
|
void SetArcviolation(int arcviolation) const;
|
|
int ReadPopulationSize() const;
|
|
void SetPopulationSize(int populationSize) const;
|
|
int ReadNumberXovers() const;
|
|
void SetNumberXovers(int numberXovers) const;
|
|
unsigned int ReadOrderRandomization() const;
|
|
void SetOrderRandomization(unsigned int factor) const;
|
|
unsigned long ReadMemoryInUse() const;
|
|
long ReadPeakNodeCount() const;
|
|
long ReadNodeCount() const;
|
|
long zddReadNodeCount() const;
|
|
void AddHook(DD_HFP f, Cudd_HookType where) const;
|
|
void RemoveHook(DD_HFP f, Cudd_HookType where) const;
|
|
bool IsInHook(DD_HFP f, Cudd_HookType where) const;
|
|
void EnableReorderingReporting() const;
|
|
void DisableReorderingReporting() const;
|
|
bool ReorderingReporting() const;
|
|
int ReadErrorCode() const;
|
|
void ClearErrorCode() const;
|
|
FILE *ReadStdout() const;
|
|
void SetStdout(FILE *) const;
|
|
FILE *ReadStderr() const;
|
|
void SetStderr(FILE *) const;
|
|
unsigned int ReadNextReordering() const;
|
|
void SetNextReordering(unsigned int) const;
|
|
double ReadSwapSteps() const;
|
|
unsigned int ReadMaxLive() const;
|
|
void SetMaxLive(unsigned int) const;
|
|
unsigned long ReadMaxMemory() const;
|
|
void SetMaxMemory(unsigned long) const;
|
|
int bddBindVar(int) const;
|
|
int bddUnbindVar(int) const;
|
|
bool bddVarIsBound(int) const;
|
|
ADD Walsh(std::vector<ADD> x, std::vector<ADD> y);
|
|
ADD addResidue(int n, int m, int options, int top);
|
|
int ApaNumberOfDigits(int binaryDigits) const;
|
|
DdApaNumber NewApaNumber(int digits) const;
|
|
void ApaCopy(int digits, DdApaNumber source, DdApaNumber dest) const;
|
|
DdApaDigit ApaAdd(int digits, DdApaNumber a, DdApaNumber b, DdApaNumber
|
|
sum) const;
|
|
DdApaDigit ApaSubtract(int digits, DdApaNumber a, DdApaNumber b,
|
|
DdApaNumber diff) const;
|
|
DdApaDigit ApaShortDivision(int digits, DdApaNumber dividend, DdApaDigit
|
|
divisor, DdApaNumber quotient) const;
|
|
void ApaShiftRight(int digits, DdApaDigit in, DdApaNumber a, DdApaNumber
|
|
b) const;
|
|
void ApaSetToLiteral(int digits, DdApaNumber number, DdApaDigit literal)
|
|
const;
|
|
void ApaPowerOfTwo(int digits, DdApaNumber number, int power) const;
|
|
void ApaPrintHex(FILE * fp, int digits, DdApaNumber number) const;
|
|
void ApaPrintDecimal(FILE * fp, int digits, DdApaNumber number) const;
|
|
void DebugCheck();
|
|
void CheckKeys();
|
|
MtrNode * MakeTreeNode(unsigned int low, unsigned int size, unsigned int type) const;
|
|
// void Harwell(FILE * fp, ADD* E, ADD** x, ADD** y, ADD** xn, ADD** yn_, int * nx, int * ny, int * m, int * n, int bx, int sx, int by, int sy, int pr);
|
|
void PrintLinear();
|
|
int ReadLinear(int x, int y);
|
|
BDD Xgty(std::vector<BDD> z, std::vector<BDD> x, std::vector<BDD> y);
|
|
BDD Xeqy(std::vector<BDD> x, std::vector<BDD> y);
|
|
ADD Xeqy(std::vector<ADD> x, std::vector<ADD> y);
|
|
BDD Dxygtdxz(std::vector<BDD> x, std::vector<BDD> y, std::vector<BDD> z);
|
|
BDD Dxygtdyz(std::vector<BDD> x, std::vector<BDD> y, std::vector<BDD> z);
|
|
BDD Inequality(int c, std::vector<BDD> x, std::vector<BDD> y);
|
|
BDD Disequality(int c, std::vector<BDD> x, std::vector<BDD> y);
|
|
BDD Interval(std::vector<BDD> x, unsigned int lowerB, unsigned int upperB);
|
|
ADD Hamming(std::vector<ADD> xVars, std::vector<ADD> yVars);
|
|
// void Read(FILE * fp, ADD* E, ADD** x, ADD** y, ADD** xn, ADD** yn_, int * nx, int * ny, int * m, int * n, int bx, int sx, int by, int sy);
|
|
// void Read(FILE * fp, BDD* E, BDD** x, BDD** y, int * nx, int * ny, int * m, int * n, int bx, int sx, int by, int sy);
|
|
void ReduceHeap(Cudd_ReorderingType heuristic, int minsize);
|
|
void ShuffleHeap(int * permutation);
|
|
void SymmProfile(int lower, int upper) const;
|
|
unsigned int Prime(unsigned int pr) const;
|
|
void Reserve(int amount) const;
|
|
int SharingSize(DD* nodes, int n) const;
|
|
int SharingSize(const std::vector<BDD>& v) const;
|
|
BDD bddComputeCube(BDD * vars, int * phase, int n) const;
|
|
ADD addComputeCube(ADD * vars, int * phase, int n);
|
|
int NextNode(DdGen * gen, BDD * nnode);
|
|
BDD IndicesToCube(int * array, int n);
|
|
void PrintVersion(FILE * fp) const;
|
|
double AverageDistance() const;
|
|
long Random() const;
|
|
void Srandom(long seed) const;
|
|
MtrNode * MakeZddTreeNode(unsigned int low, unsigned int size, unsigned int type);
|
|
void zddPrintSubtable() const;
|
|
void zddReduceHeap(Cudd_ReorderingType heuristic, int minsize);
|
|
void zddShuffleHeap(int * permutation);
|
|
void zddSymmProfile(int lower, int upper) const;
|
|
void DumpDot(
|
|
const std::vector<BDD>& nodes,
|
|
char ** inames = 0,
|
|
char ** onames = 0,
|
|
FILE * fp = stdout) const;
|
|
void DumpDaVinci(
|
|
const std::vector<BDD>& nodes,
|
|
char ** inames = 0,
|
|
char ** onames = 0,
|
|
FILE * fp = stdout) const;
|
|
void DumpBlif(
|
|
const std::vector<BDD>& nodes,
|
|
char ** inames = 0,
|
|
char ** onames = 0,
|
|
char * mname = 0,
|
|
FILE * fp = stdout,
|
|
int mv = 0) const;
|
|
void DumpDDcal(
|
|
const std::vector<BDD>& nodes,
|
|
char ** inames = 0,
|
|
char ** onames = 0,
|
|
FILE * fp = stdout) const;
|
|
void DumpFactoredForm(
|
|
const std::vector<BDD>& nodes,
|
|
char ** inames = 0,
|
|
char ** onames = 0,
|
|
FILE * fp = stdout) const;
|
|
BDD VectorSupport(const std::vector<BDD>& roots) const;
|
|
std::vector<unsigned int>
|
|
SupportIndices(const std::vector<ABDD>& roots) const;
|
|
int nodeCount(const std::vector<BDD>& roots) const;
|
|
int VectorSupportSize(const std::vector<BDD>& roots) const;
|
|
void DumpDot(
|
|
const std::vector<ADD>& nodes,
|
|
char ** inames = 0,
|
|
char ** onames = 0,
|
|
FILE * fp = stdout) const;
|
|
void DumpDaVinci(
|
|
const std::vector<ADD>& nodes,
|
|
char ** inames = 0,
|
|
char ** onames = 0,
|
|
FILE * fp = stdout) const;
|
|
BDD VectorSupport(const std::vector<ADD>& roots) const;
|
|
int VectorSupportSize(const std::vector<ADD>& roots) const;
|
|
void DumpDot(
|
|
const std::vector<ZDD>& nodes,
|
|
char ** inames = 0,
|
|
char ** onames = 0,
|
|
FILE * fp = stdout) const;
|
|
|
|
}; // Cudd
|
|
|
|
|
|
extern void defaultError(std::string message);
|
|
|
|
#endif
|