00001 // -*- c++ -*- 00002 //***************************************************************************** 00166 //***************************************************************************** 00167 00168 // load PolyBoRi settings 00169 # include "pbori_defs.h" 00170 00171 // include basic decision diagram manager interface 00172 #include "CDDManager.h" 00173 #include "OrderedManager.h" 00174 00175 #include "BooleRing.h" 00176 00177 // temporarily for work around 00178 #include <list> 00179 00180 #ifndef BoolePolyRing_h_ 00181 #define BoolePolyRing_h_ 00182 00183 00184 BEGIN_NAMESPACE_PBORI 00185 00186 class COrderBase; 00187 class CDynamicOrderBase; 00188 00189 class BooleExponent; 00190 class BooleMonomial; 00191 00192 00198 class BoolePolyRing: 00199 public BooleRing { 00200 00201 public: 00202 //------------------------------------------------------------------------- 00203 // types definitions 00204 //------------------------------------------------------------------------- 00205 00207 typedef BoolePolyRing self; 00208 00210 typedef BooleRing base; 00211 00213 typedef BooleExponent exp_type; 00214 00216 typedef BooleMonomial monom_type; 00217 00219 typedef std::vector<idx_type> block_idx_type; 00220 00222 typedef block_idx_type::const_iterator block_iterator; 00223 00225 typedef CDynamicOrderBase order_type; 00226 00228 typedef PBORI_SHARED_PTR(order_type) order_ptr; 00229 00231 typedef order_type& order_reference; 00232 00233 //------------------------------------------------------------------------- 00234 // constructors and destructor 00235 //------------------------------------------------------------------------- 00236 00238 using base::ordercodes; 00239 00241 BoolePolyRing(); 00242 00244 explicit BoolePolyRing(size_type nvars, 00245 ordercode_type order = lp, 00246 bool_type make_active = true); 00247 00249 ~BoolePolyRing() {} 00250 00252 void activate(); 00253 00255 BoolePolyRing(const base& rhs, order_ptr order): 00256 base(rhs), pOrder(order) {} 00257 00259 void changeOrdering(ordercode_type); 00260 00261 idx_type lastBlockStart() { 00262 if (ordering().isBlockOrder()) { 00263 return *(ordering().blockEnd() - 2); 00264 } 00265 else if (ordering().isLexicographical()) { 00266 return CTypes::max_idx; 00267 } 00268 return 0; 00269 } 00270 00272 order_reference ordering() const { return *pOrder; } 00273 00275 self clone() const { 00276 return self(base::clone(), pOrder); 00277 } 00278 protected: 00280 order_ptr pOrder; 00281 }; 00282 00283 END_NAMESPACE_PBORI 00284 00285 #endif // of #ifndef BoolePolyRing_h_