2 changed files with 6527 additions and 0 deletions
			
			
		- 
					5759resources/3rdparty/cudd-2.5.0/src/obj/cuddObj.cc
- 
					768resources/3rdparty/cudd-2.5.0/src/obj/cuddObj.hh
						
							
						
						
							5759
	
						
						resources/3rdparty/cudd-2.5.0/src/obj/cuddObj.cc
						
							File diff suppressed because it is too large
							
							
								
									View File
								
							
						
					
				File diff suppressed because it is too large
							
							
								
									View File
								
							
						| @ -0,0 +1,768 @@ | |||||
|  | /**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
 | ||||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue