PolyBoRi
Public Types | Public Member Functions | Protected Member Functions
polybori::CCuddInterface Class Reference

This class defines a C++ interface to CUDD's decicion diagram manager. More...

#include <CCuddInterface.h>

Inheritance diagram for polybori::CCuddInterface:
polybori::CAuxTypes

List of all members.

Public Types

typedef DdNode * node_ptr
 Type of Cudd's decision diagrams.
typedef DdManager mgr_type
 Type of Cudd decision diagram manager.
typedef int cudd_idx_type
typedef node_ptr(* unary_int_function )(mgr_type *, cudd_idx_type)
typedef node_ptr(* void_function )(mgr_type *)
typedef boost::intrusive_ptr
< mgr_type
mgr_ptr
 Smart pointer to Cudd manager.

Public Member Functions

 CCuddInterface (size_type numVars, size_type numVarsZ, size_type numSlots=CUDD_UNIQUE_SLOTS, size_type cacheSize=CUDD_CACHE_SLOTS, unsigned long maxMemory=0)
 Initialize CUDD-like decision diagram manager.
 CCuddInterface (const self &rhs)
 Copy constructor.
 ~CCuddInterface ()
 Destructor.
mgr_typegetManager () const
 Get pure CUDD structure.
mgr_ptr pManager () const
 Get (shared) pointer to initialized manager.
selfoperator= (const self &right)
 Assignment operation.
node_ptr zddVar (idx_type idx) const
 Get ZDD variable.
node_ptr zddOne (idx_type iMax) const
 Get 1-terminal for ZDDs.
node_ptr zddZero () const
 Get 0-terminal for ZDDs.
node_ptr zddOne () const
 Get 1-terminal for ZDDs.
*node_ptr getVar (idx_type idx) const
size_type nVariables () const
 Get number of managed variables.
void cacheFlush ()
 clear all temporarily stored data
Member functions mimicking/interfacing with CUDD procedures
Note:
See preprocessor generated members below
int ReorderingStatusZdd (Cudd_ReorderingType *method) const
idx_type ReadPermZdd (idx_type idx) const
idx_type ReadInvPermZdd (idx_type idx) const
void AddHook (DD_HFP f, Cudd_HookType where)
void RemoveHook (DD_HFP f, Cudd_HookType where)
int IsInHook (DD_HFP f, Cudd_HookType where) const
void EnableReorderingReporting ()
void DisableReorderingReporting ()
void DebugCheck ()
void CheckKeys ()
void PrintLinear ()
int ReadLinear (int x, int y)
size_type Prime (size_type pr) const
void PrintVersion (FILE *fp) const
MtrNode * MakeZddTreeNode (size_type low, size_type size, size_type type)
void zddPrintSubtable () const
void zddReduceHeap (Cudd_ReorderingType heuristic, int minsize)
void zddShuffleHeap (int *permutation)
void zddSymmProfile (int lower, int upper) const

Protected Member Functions

mgr_ptr init (size_type numVars, size_type numVarsZ, size_type numSlots, size_type cacheSize, large_size_type maxMemory)
 initialized CUDD decision diagrma manager, check it and start reference counting
node_ptr checkedResult (node_ptr result) const
 Generate check result of previous node operation and convert.
void checkedResult (int result) const
 Generate check numerical result of previous operation.
node_ptr apply (unary_int_function func, idx_type idx) const
 Apply function to given index.
node_ptr apply (void_function func) const
 Call function.
void recursiveDeref (node_ptr node) const
 Dereferencing of diagram node.
void initVar (node_ptr &node, idx_type idx) const
 Generate raw variable.
template<class MemberFuncPtr >
CCallbackWrapper< MemberFuncPtr > callBack (MemberFuncPtr ptr)
 Wrapping memeber function as functional.

Detailed Description

This class defines a C++ interface to CUDD's decicion diagram manager.

The purpose of this wrapper is just to provide an efficient and save way of handling the decision diagram management. It corrects some short-comings of CUDD's built-in interface.

Attention:
This class is intented for internal use only. Use the highlevel classes CDDManager<CCuddInterface> or BoolePolyRing instead.

Member Typedef Documentation

typedef boost::intrusive_ptr<mgr_type> polybori::CCuddInterface::mgr_ptr

Smart pointer to Cudd manager.

Type of Cudd decision diagram manager.

Type of Cudd's decision diagrams.


Constructor & Destructor Documentation

polybori::CCuddInterface::CCuddInterface ( size_type  numVars,
size_type  numVarsZ,
size_type  numSlots = CUDD_UNIQUE_SLOTS,
size_type  cacheSize = CUDD_CACHE_SLOTS,
unsigned long  maxMemory = 0 
) [inline]

Initialize CUDD-like decision diagram manager.

polybori::CCuddInterface::CCuddInterface ( const self rhs) [inline]

Copy constructor.

polybori::CCuddInterface::~CCuddInterface ( ) [inline]

Destructor.


Member Function Documentation

void polybori::CCuddInterface::AddHook ( DD_HFP  f,
Cudd_HookType  where 
) [inline]
node_ptr polybori::CCuddInterface::apply ( unary_int_function  func,
idx_type  idx 
) const [inline, protected]

Apply function to given index.

node_ptr polybori::CCuddInterface::apply ( void_function  func) const [inline, protected]

Call function.

void polybori::CCuddInterface::cacheFlush ( ) [inline]

clear all temporarily stored data

template<class MemberFuncPtr >
CCallbackWrapper<MemberFuncPtr> polybori::CCuddInterface::callBack ( MemberFuncPtr  ptr) [inline, protected]

Wrapping memeber function as functional.

void polybori::CCuddInterface::checkedResult ( int  result) const [inline, protected]

Generate check numerical result of previous operation.

References error_text(), and UNLIKELY.

node_ptr polybori::CCuddInterface::checkedResult ( node_ptr  result) const [inline, protected]

Generate check result of previous node operation and convert.

void polybori::CCuddInterface::CheckKeys ( ) [inline]
void polybori::CCuddInterface::DebugCheck ( ) [inline]
void polybori::CCuddInterface::DisableReorderingReporting ( ) [inline]
void polybori::CCuddInterface::EnableReorderingReporting ( ) [inline]
mgr_type* polybori::CCuddInterface::getManager ( ) const [inline]

Get pure CUDD structure.

* node_ptr polybori::CCuddInterface::getVar ( idx_type  idx) const [inline]
Note:
Preprocessor generated members
  BOOST_PP_SEQ_FOR_EACH(PB_CUDDMGR_SET, size_type, 
    (SetMinHit)(SetLooseUpTo)(SetMaxCacheHard)(SetMaxLive) )

  BOOST_PP_SEQ_FOR_EACH(PB_CUDDMGR_SET, int, 
    (SetSiftMaxVar)(SetSiftMaxSwap)(SetRecomb)(SetSymmviolation)
    (SetArcviolation)(SetPopulationSize)(SetNumberXovers)
  )

  BOOST_PP_SEQ_FOR_EACH(PB_CUDDMGR_SET, FILE*, (SetStdout)(SetStderr))

  BOOST_PP_SEQ_FOR_EACH(PB_CUDDMGR_SWITCH, BOOST_PP_NIL, 
    (zddRealignEnable)(zddRealignDisable)
    (AutodynDisableZdd)(FreeZddTree)
    (EnableGarbageCollection)(DisableGarbageCollection)
    (TurnOnCountDead)(TurnOffCountDead)(ClearErrorCode)  
  )

  BOOST_PP_SEQ_FOR_EACH(PB_CUDDMGR_READ, double,
    (ReadCacheUsedSlots)(ReadCacheLookUps)(ReadCacheHits) 
    (ReadSwapSteps)(ReadMaxGrowth)(AverageDistance)
  )

  BOOST_PP_SEQ_FOR_EACH(PB_CUDDMGR_READ, size_type,
    (ReadCacheSlots)(ReadMinHit)(ReadLooseUpTo)(ReadMaxCache)
    (ReadMaxCacheHard)(ReadSlots)(ReadKeys)(ReadDead)(ReadMinDead)
    (ReadNextReordering)(ReadMaxLive)
  )

  BOOST_PP_SEQ_FOR_EACH(PB_CUDDMGR_READ, int,
    (zddRealignmentEnabled)(ReadZddSize)(ReadReorderings)(ReadSiftMaxVar)
    (ReadSiftMaxSwap)(ReadGarbageCollections)(GarbageCollectionEnabled)
    (DeadAreCounted)(ReadRecomb)
    (ReadPopulationSize)(ReadSymmviolation)(ReadArcviolation)
    (ReadNumberXovers)(ReorderingReporting)(ReadErrorCode)
  )

  BOOST_PP_SEQ_FOR_EACH(PB_CUDDMGR_READ, long,
    (ReadReorderingTime)(ReadGarbageCollectionTime)
    (ReadPeakNodeCount)(zddReadNodeCount)
  )

  BOOST_PP_SEQ_FOR_EACH(PB_CUDDMGR_READ, large_size_type, 
    (ReadMemoryInUse)(ReadMaxMemory) )

  BOOST_PP_SEQ_FOR_EACH(PB_CUDDMGR_READ, FILE*, (ReadStdout)(ReadStderr))



  void  AutodynEnableZdd ( Cudd_ReorderingType  arg) {   BOOST_PP_CAT(Cudd_,  AutodynEnableZdd )(*this, arg); }
  void  SetMaxMemory ( unsigned long  arg) {   BOOST_PP_CAT(Cudd_,  SetMaxMemory )(*this, arg); }
  void  SetMaxGrowth ( double  arg) {   BOOST_PP_CAT(Cudd_,  SetMaxGrowth )(*this, arg); }
  void  SetZddTree ( MtrNode*  arg) {   BOOST_PP_CAT(Cudd_,  SetZddTree )(*this, arg); }

References UNLIKELY.

mgr_ptr polybori::CCuddInterface::init ( size_type  numVars,
size_type  numVarsZ,
size_type  numSlots,
size_type  cacheSize,
large_size_type  maxMemory 
) [inline, protected]

initialized CUDD decision diagrma manager, check it and start reference counting

References UNLIKELY.

void polybori::CCuddInterface::initVar ( node_ptr node,
idx_type  idx 
) const [inline, protected]

Generate raw variable.

int polybori::CCuddInterface::IsInHook ( DD_HFP  f,
Cudd_HookType  where 
) const [inline]
MtrNode* polybori::CCuddInterface::MakeZddTreeNode ( size_type  low,
size_type  size,
size_type  type 
) [inline]
size_type polybori::CCuddInterface::nVariables ( ) const [inline]

Get number of managed variables.

self& polybori::CCuddInterface::operator= ( const self right) [inline]

Assignment operation.

mgr_ptr polybori::CCuddInterface::pManager ( ) const [inline]

Get (shared) pointer to initialized manager.

size_type polybori::CCuddInterface::Prime ( size_type  pr) const [inline]
void polybori::CCuddInterface::PrintLinear ( ) [inline]
void polybori::CCuddInterface::PrintVersion ( FILE *  fp) const [inline]
idx_type polybori::CCuddInterface::ReadInvPermZdd ( idx_type  idx) const [inline]
Note:
unused (do not use permutations if the variables)
int polybori::CCuddInterface::ReadLinear ( int  x,
int  y 
) [inline]
idx_type polybori::CCuddInterface::ReadPermZdd ( idx_type  idx) const [inline]
Note:
unused (do not use permutations if the variables)
void polybori::CCuddInterface::recursiveDeref ( node_ptr  node) const [inline, protected]

Dereferencing of diagram node.

void polybori::CCuddInterface::RemoveHook ( DD_HFP  f,
Cudd_HookType  where 
) [inline]
int polybori::CCuddInterface::ReorderingStatusZdd ( Cudd_ReorderingType *  method) const [inline]
node_ptr polybori::CCuddInterface::zddOne ( ) const [inline]

Get 1-terminal for ZDDs.

node_ptr polybori::CCuddInterface::zddOne ( idx_type  iMax) const [inline]

Get 1-terminal for ZDDs.

void polybori::CCuddInterface::zddPrintSubtable ( ) const [inline]
void polybori::CCuddInterface::zddReduceHeap ( Cudd_ReorderingType  heuristic,
int  minsize 
) [inline]
void polybori::CCuddInterface::zddShuffleHeap ( int *  permutation) [inline]
void polybori::CCuddInterface::zddSymmProfile ( int  lower,
int  upper 
) const [inline]
node_ptr polybori::CCuddInterface::zddVar ( idx_type  idx) const [inline]

Get ZDD variable.

node_ptr polybori::CCuddInterface::zddZero ( ) const [inline]

Get 0-terminal for ZDDs.


The documentation for this class was generated from the following file: