#ifndef __CPM__DATASTRUCTURES__QUADEDGEITERATORS__HXX__ #define __CPM__DATASTRUCTURES__QUADEDGEITERATORS__HXX__ // ------------------------------------------------------------------------- template< class E > cpm::DataStructures::QuadEdgeBaseIterator< E >:: QuadEdgeBaseIterator( E* e, int op, bool start ) : m_StartEdge( e ), m_Iterator( e ), m_OpType( op ), m_Start( start ) { } // ------------------------------------------------------------------------- template< class E > cpm::DataStructures::QuadEdgeBaseIterator< E >:: ~QuadEdgeBaseIterator( ) { } // ------------------------------------------------------------------------- template< class E > typename cpm::DataStructures::QuadEdgeBaseIterator< E >:: Self& cpm::DataStructures::QuadEdgeBaseIterator< E >:: operator=( const Self& r ) { if( this != &r ) { this->m_StartEdge = r.m_StartEdge; this->m_Iterator = r.m_Iterator; this->m_OpType = r.m_OpType; this->m_Start = r.m_Start; } // fi return( *this ); } // ------------------------------------------------------------------------- template< class E > E* cpm::DataStructures::QuadEdgeBaseIterator< E >:: GetStartEdge( ) const { return( this->m_StartEdge ); } // ------------------------------------------------------------------------- template< class E > E* cpm::DataStructures::QuadEdgeBaseIterator< E >:: GetIterator( ) const { return( this->m_Iterator ); } // ------------------------------------------------------------------------- template< class E > int cpm::DataStructures::QuadEdgeBaseIterator< E >:: GetOpType( ) const { return( this->m_OpType ); } // ------------------------------------------------------------------------- template< class E > bool cpm::DataStructures::QuadEdgeBaseIterator< E >:: GetStart( ) const { return( this->m_Start ); } // ------------------------------------------------------------------------- template< class E > bool cpm::DataStructures::QuadEdgeBaseIterator< E >:: operator==( Self& r ) { return( ( this->m_StartEdge == r.m_StartEdge ) && ( this->m_Iterator == r.m_Iterator ) && ( this->m_OpType == r.m_OpType ) && ( this->m_Start == r.m_Start ) ); } // ------------------------------------------------------------------------- template< class E > bool cpm::DataStructures::QuadEdgeBaseIterator< E >:: operator==( const Self& r ) const { return( ( this->m_StartEdge == r.m_StartEdge ) && ( this->m_Iterator == r.m_Iterator ) && ( this->m_OpType == r.m_OpType ) && ( this->m_Start == r.m_Start ) ); } // ------------------------------------------------------------------------- template< class E > bool cpm::DataStructures::QuadEdgeBaseIterator< E >:: operator!=( Self& r ) { return( !( this->operator==( r ) ) ); } // ------------------------------------------------------------------------- template< class E > bool cpm::DataStructures::QuadEdgeBaseIterator< E >:: operator!=( const Self& r ) const { return( !( this->operator==( r ) ) ); } // ------------------------------------------------------------------------- template< class E > typename cpm::DataStructures::QuadEdgeBaseIterator< E >:: Self& cpm::DataStructures::QuadEdgeBaseIterator< E >:: operator++( ) { if( this->m_Start ) { this->_GoToNext( ); this->m_Start = !( this->m_Iterator == this->m_StartEdge ); } // fi return( *this ); } // ------------------------------------------------------------------------- template< class E > typename cpm::DataStructures::QuadEdgeBaseIterator< E >:: Self& cpm::DataStructures::QuadEdgeBaseIterator< E >:: operator++( int ) { if( this->m_Start ) { this->_GoToNext( ); this->m_Start = !( this->m_Iterator == this->m_StartEdge ); } // fi return( *this ); } // ------------------------------------------------------------------------- template< class E > void cpm::DataStructures::QuadEdgeBaseIterator< E >:: _GoToNext( ) { switch( this->m_OpType ) { case Self::OpOnext: this->m_Iterator = this->m_Iterator->GetOnext( ); break; case Self::OpLnext: this->m_Iterator = this->m_Iterator->GetLnext( ); break; case Self::OpRnext: this->m_Iterator = this->m_Iterator->GetRnext( ); break; case Self::OpDnext: this->m_Iterator = this->m_Iterator->GetDnext( ); break; case Self::OpOprev: this->m_Iterator = this->m_Iterator->GetOprev( ); break; case Self::OpLprev: this->m_Iterator = this->m_Iterator->GetLprev( ); break; case Self::OpRprev: this->m_Iterator = this->m_Iterator->GetRprev( ); break; case Self::OpDprev: this->m_Iterator = this->m_Iterator->GetDprev( ); break; default: break; } // hctiws } // ------------------------------------------------------------------------- template< class E > cpm::DataStructures::QuadEdgeIterator< E >:: QuadEdgeIterator( E* e, int op, bool start ) : Superclass( e, op, start ) { } // ------------------------------------------------------------------------- template< class E > cpm::DataStructures::QuadEdgeIterator< E >:: ~QuadEdgeIterator( ) { } // ------------------------------------------------------------------------- template< class E > E* cpm::DataStructures::QuadEdgeIterator< E >:: operator*( ) { return( this->m_Iterator ); } // ------------------------------------------------------------------------- template< class E > cpm::DataStructures::QuadEdgeConstIterator< E >:: QuadEdgeConstIterator( const E* e, int op, bool start ) : Superclass( e, op, start ) { } // ------------------------------------------------------------------------- template< class E > cpm::DataStructures::QuadEdgeConstIterator< E >:: ~QuadEdgeConstIterator( ) { } // ------------------------------------------------------------------------- template< class E > const E* cpm::DataStructures::QuadEdgeConstIterator< E >:: operator*( ) const { return( this->m_Iterator ); } // ------------------------------------------------------------------------- template< class E > cpm::DataStructures::QuadEdgePointIterator< E >:: QuadEdgePointIterator( const E* e, int op, bool start ) : Superclass( e, op, start ) { } // ------------------------------------------------------------------------- template< class E > cpm::DataStructures::QuadEdgePointIterator< E >:: ~QuadEdgePointIterator( ) { } // ------------------------------------------------------------------------- template< class E > typename E::TPrimalGeometry& cpm::DataStructures::QuadEdgePointIterator< E >:: operator*( ) { return( this->m_Iterator->GetOrigin( ) ); } // ------------------------------------------------------------------------- template< class E > cpm::DataStructures::QuadEdgePointConstIterator< E >:: QuadEdgePointConstIterator( const E* e, int op, bool start ) : Superclass( e, op, start ) { } // ------------------------------------------------------------------------- template< class E > cpm::DataStructures::QuadEdgePointConstIterator< E >:: ~QuadEdgePointConstIterator( ) { } // ------------------------------------------------------------------------- template< class E > const typename E::TPrimalGeometry& cpm::DataStructures::QuadEdgePointConstIterator< E >:: operator*( ) const { return( this->m_Iterator->GetOrigin( ) ); } #endif // __CPM__DATASTRUCTURES__QUADEDGEITERATORS__HXX__ // eof - $RCSfile$