PolyBoRi
|
00001 // -*- c++ -*- 00002 //***************************************************************************** 00160 //***************************************************************************** 00161 00162 // load PolyBoRi settings 00163 # include "pbori_defs.h" 00164 00165 // include basic decision diagram manager interface 00166 #include "CDDManager.h" 00167 #include "OrderedManager.h" 00168 00169 #include "BooleRing.h" 00170 00171 // temporarily for work around 00172 #include <list> 00173 00174 #ifndef BoolePolyRing_h_ 00175 #define BoolePolyRing_h_ 00176 00177 00178 BEGIN_NAMESPACE_PBORI 00179 00180 class COrderBase; 00181 class CDynamicOrderBase; 00182 00183 class BooleExponent; 00184 class BooleMonomial; 00185 00186 00192 class BoolePolyRing: 00193 public BooleRing { 00194 00195 public: 00196 //------------------------------------------------------------------------- 00197 // types definitions 00198 //------------------------------------------------------------------------- 00199 00201 typedef BoolePolyRing self; 00202 00204 typedef BooleRing base; 00205 00207 typedef BooleExponent exp_type; 00208 00210 typedef BooleMonomial monom_type; 00211 00213 typedef std::vector<idx_type> block_idx_type; 00214 00216 typedef block_idx_type::const_iterator block_iterator; 00217 00219 typedef CDynamicOrderBase order_type; 00220 00222 typedef PBORI_SHARED_PTR(order_type) order_ptr; 00223 00225 typedef order_type& order_reference; 00226 00227 //------------------------------------------------------------------------- 00228 // constructors and destructor 00229 //------------------------------------------------------------------------- 00230 00232 using base::ordercodes; 00233 00235 BoolePolyRing(size_type nvars=100, 00236 ordercode_type order = lp, 00237 bool_type make_active = true); 00238 00240 ~BoolePolyRing() {} 00241 00243 void activate(); 00244 00245 00247 void changeOrdering(ordercode_type); 00248 00249 idx_type lastBlockStart() { 00250 if (ordering().isBlockOrder()) { 00251 return *(ordering().blockEnd() - 2); 00252 } 00253 else if (ordering().isLexicographical()) { 00254 return CTypes::max_idx; 00255 } 00256 return 0; 00257 } 00258 00260 order_reference ordering() const { return *pOrder; } 00261 00262 protected: 00264 order_ptr pOrder; 00265 }; 00266 00267 END_NAMESPACE_PBORI 00268 00269 #endif // of #ifndef BoolePolyRing_h_