• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

CDegLexIter.h

Go to the documentation of this file.
00001 // -*- c++ -*-
00002 //*****************************************************************************
00039 //*****************************************************************************
00040 
00041 
00042 // include basic definitions
00043 #include "pbori_defs.h"
00044 
00045 
00046 #include "BoolePolynomial.h"
00047 #include "CDelayedTermIter.h"
00048 #include "CRestrictedIter.h"
00049 
00050 #include <algorithm>
00051 
00052 #ifndef CDegLexIter_h_
00053 #define CDegLexIter_h_
00054 
00055 BEGIN_NAMESPACE_PBORI
00056 #if 0
00057 template<class PolyType, class PolyDegIter = typename PolyType::deg_iterator>
00058 class CDegLexIter {
00059 
00060 public:
00061 
00063   typedef PolyType poly_type;
00064 
00066   typedef typename poly_type::size_type size_type;
00067 
00069   typedef typename poly_type::bool_type bool_type;
00070 
00072   typedef typename poly_type::monom_type monom_type;
00073 
00075   typedef monom_type term_type;
00076 
00078   typedef typename poly_type::deg_iterator deg_iterator;
00079 
00081 
00082   typedef term_type value_type;
00083   typedef std::forward_iterator_tag iterator_category;
00084   typedef typename deg_iterator::difference_type difference_type;
00085   typedef void pointer;
00086   typedef value_type reference;
00088 
00090   typedef CDelayedTermIter<monom_type, 
00091                            change_assign<monom_type>, project_ith<2>, 
00092                            deg_iterator> delayed_term_iterator;
00093 
00094   typedef CRestrictedIter<delayed_term_iterator> bounded_iterator;
00095 
00097   typedef CDegLexIter self;
00098 
00099   // Constructor
00100   CDegLexIter(const delayed_term_iterator& start, 
00101               const delayed_term_iterator& finish ): 
00102     m_iter(std::max_element(start, finish)), m_start(start), m_finish(finish) {
00103 
00104   }
00105   // Default Constructor
00106   CDegLexIter():  m_iter(), m_start(), m_finish() {}
00107 
00109   reference operator*() const {
00110     return m_iter.term();
00111   }
00112 
00114   self& operator++() {
00115     if (m_iter != m_finish) {
00116       size_type deg = *m_iter;
00117       ++m_iter;
00118       m_iter = std::find(m_iter, m_finish, deg);
00119       
00120       if(m_iter == m_finish) {
00121         m_iter = std::max_element( bounded_iterator(m_start, deg),
00122                                    bounded_iterator(m_finish, deg) );
00123 
00124       }
00125     }
00126 
00127     return *this; 
00128   }
00129 
00130   self operator++(int) {
00131     self result(*this);
00132     operator++();
00133     return result;
00134   }
00135 
00136 
00137   bool_type operator!=(const self& rhs) const {
00138     return (m_iter != rhs.m_iter);
00139   }
00140 
00141   bool_type operator==(const self& rhs) const {
00142     return (m_iter == rhs.m_iter);
00143   }
00144 
00145 private:
00146   delayed_term_iterator m_iter, m_start, m_finish;
00147 };
00148 
00149 #endif
00150 
00151 END_NAMESPACE_PBORI
00152 
00153 #endif

Generated on Thu Oct 21 2010 06:56:30 for PolyBoRi by  doxygen 1.7.1