00001 // -*- c++ -*- 00002 //***************************************************************************** 00034 //***************************************************************************** 00035 00036 // load PolyBoRi settings 00037 # include "pbori_defs.h" 00038 00039 // include basic decision diagram manager interface 00040 #include "CDDManager.h" 00041 00042 00043 #ifndef BooleRing_h_ 00044 #define BooleRing_h_ 00045 00046 BEGIN_NAMESPACE_PBORI 00047 00053 class BooleRing: 00054 public CTypes::orderenums_type, public CTypes::compenums_type, 00055 public CTypes::auxtypes_type { 00056 00057 public: 00058 //------------------------------------------------------------------------- 00059 // types definitions 00060 //------------------------------------------------------------------------- 00061 00063 typedef BooleRing self; 00064 00066 typedef CTypes::orderenums_type base; 00067 00069 00070 typedef CTypes::ordercode_type ordercode_type; 00071 typedef CTypes::manager_type manager_type; 00072 typedef CTypes::manager_reference manager_reference; 00073 typedef CTypes::manager_ptr manager_ptr; 00074 typedef CTypes::dd_type dd_type; 00075 typedef CTypes::vartext_type vartext_type; 00077 00079 using base::ordercodes; 00080 00082 BooleRing(size_type nvars = 100): 00083 m_mgr(nvars) {} 00084 00085 BooleRing(const manager_type& mgr): 00086 m_mgr(mgr) {} 00087 00089 ~BooleRing() {} 00090 00092 manager_type& manager() { return m_mgr; } 00093 00095 const manager_type& manager() const { return m_mgr; } 00096 00098 dd_type ddVariable(idx_type nvar) const { return m_mgr.ddVariable(nvar); } 00099 00101 dd_type variable(idx_type nvar) const { return m_mgr.variable(nvar); } 00102 00104 dd_type persistentVariable(idx_type nvar) const { 00105 return m_mgr.persistentVariable(nvar); 00106 } 00107 00109 dd_type zero() const { return m_mgr.empty(); } 00110 00112 dd_type one() const { return m_mgr.blank(); } 00113 00115 size_type nVariables() const { return m_mgr.nVariables(); } 00116 00118 vartext_type getVariableName(idx_type idx){ 00119 return m_mgr.getVariableName(idx); 00120 } 00121 00123 void setVariableName(idx_type idx, vartext_type varname) { 00124 m_mgr.setVariableName(idx, varname); 00125 } 00126 00128 void clearCache() { cuddCacheFlush(m_mgr.manager().getManager()); } 00129 00131 void printInfo() { return m_mgr.printInfo(); } 00132 00134 self clone() const { 00135 return self( (manager_type)CCuddCore::mgrcore_ptr(new 00136 CCuddCore(*m_mgr.manager().managerCore())) ); 00137 } 00138 00140 hash_type hash() const { 00141 return static_cast<hash_type>(reinterpret_cast<std::ptrdiff_t 00142 >(m_mgr.manager().getManager())); 00143 } 00144 protected: 00146 manager_type m_mgr; 00147 }; 00148 00149 00150 END_NAMESPACE_PBORI 00151 #endif