00001 // -*- c++ -*- 00002 //***************************************************************************** 00051 //***************************************************************************** 00052 00053 // include basic definitions 00054 #include "CCuddNavigator.h" 00055 00056 #ifndef CCuddFirstIter_h_ 00057 #define CCuddFirstIter_h_ 00058 00059 BEGIN_NAMESPACE_PBORI 00060 00067 class CCuddFirstIter : 00068 public CCuddNavigator { 00069 00070 public: 00071 00073 typedef std::forward_iterator_tag iterator_category; 00074 00076 typedef CCuddFirstIter self; 00077 00079 typedef CCuddNavigator base; 00080 00082 CCuddFirstIter(): base() {} 00083 00085 CCuddFirstIter(pointer_type ptr); // inlined below 00086 00088 CCuddFirstIter(const self& rhs): base(rhs) {} 00089 00091 CCuddFirstIter(const base& rhs): base(rhs) {} 00092 00094 ~CCuddFirstIter() {} 00095 00097 self& operator++(); 00098 00100 self operator++(int); 00101 00102 protected: 00104 void terminateConstant(); 00105 }; 00106 00107 // constructor 00108 inline 00109 CCuddFirstIter::CCuddFirstIter(pointer_type ptr): 00110 base(ptr) { 00111 00112 PBORI_TRACE_FUNC( "CCuddFirstIter::CCuddFirstIter(pointer_type)" ); 00113 terminateConstant(); 00114 } 00115 00116 00117 00118 // prefix increment operator 00119 inline CCuddFirstIter& 00120 CCuddFirstIter::operator++() { 00121 00122 PBORI_TRACE_FUNC( "CCuddFirstIter::operator++()" ); 00123 00124 incrementThen(); 00125 terminateConstant(); 00126 return *this; 00127 } 00128 00129 // postfix increment operator 00130 inline CCuddFirstIter 00131 CCuddFirstIter::operator++(int) { 00132 00133 PBORI_TRACE_FUNC( "CCuddFirstIter::operator++(int)" ); 00134 00135 self tmp(*this); 00136 operator++(); 00137 00138 return tmp; 00139 } 00140 00141 // go to valid node 00142 inline void 00143 CCuddFirstIter::terminateConstant() { 00144 00145 PBORI_TRACE_FUNC( "CCuddFirstIter::terminateConstant()" ); 00146 00147 if (isConstant()) 00148 *this = self(); // mark end of path reached 00149 00150 } 00151 00152 00153 END_NAMESPACE_PBORI 00154 00155 #endif
1.5.5