vtf-logo

circulator.h

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 
00008 #if !defined(__ads_circulator_h__)
00009 #define __ads_circulator_h__
00010 
00011 #include "../defs.h"
00012 
00013 #include <iterator>
00014 
00015 BEGIN_NAMESPACE_ADS
00016 
00018 
00023 template <class Iterator>
00024 class Face_Halfedge_circ
00025 {
00026 private:
00027 
00028   typedef  std::iterator_traits<Iterator> traits;
00029     
00030 public:
00031 
00033   typedef typename traits::value_type      value_type;
00035   typedef typename traits::difference_type difference_type;
00037   typedef typename traits::reference       reference;
00039   typedef typename traits::pointer         pointer;
00040 
00041   // I'm leaving the category blank for now.
00042 
00043 private:
00044 
00045   //
00046   // Member data.
00047   //
00048 
00049   Iterator _i;
00050 
00051 public:
00052 
00053   //
00054   // Constructors
00055   //
00056 
00058   Face_Halfedge_circ() :
00059     _i()
00060   {}
00061 
00063   explicit 
00064   Face_Halfedge_circ( Iterator i ) : 
00065     _i( i ) 
00066   {}
00067 
00069   template <class Iterator2>
00070   Face_Halfedge_circ( const Face_Halfedge_circ<Iterator2>& c ) : 
00071     _i( c.base() )
00072   {}
00073 
00074   //
00075   // Dereferencing.
00076   //
00077 
00079   reference
00080   operator*() const 
00081   { 
00082     return *_i; 
00083   }
00084   
00086   pointer
00087   operator->() const 
00088   { 
00089     return _i; 
00090   }
00091 
00092   //
00093   // Increment
00094   //
00095 
00097   Face_Halfedge_circ& 
00098   operator++() 
00099   {
00100     _i = _i->next();
00101     return *this;
00102   }
00103 
00105   Face_Halfedge_circ 
00106   operator++( int ) 
00107   {
00108     Face_Halfedge_circ tmp = *this;
00109     ++*this;
00110     return tmp;
00111   }
00112 
00113   //
00114   // Decrement
00115   //
00116 
00118   Face_Halfedge_circ& 
00119   operator--() 
00120   {
00121     _i = _i->prev();
00122     return *this;
00123   }
00124 
00126   Face_Halfedge_circ 
00127   operator--(int) 
00128   {
00129     Face_Halfedge_circ tmp = *this;
00130     --*this;
00131     return tmp;
00132   }
00133 
00134   //
00135   // Base iterator.
00136   //
00137   
00139   const Iterator&
00140   base() const
00141   {
00142     return _i;
00143   }
00144   
00145 };
00146 
00147 //
00148 // Equality
00149 //
00150 
00152 template <class Iterator>
00153 inline
00154 bool 
00155 operator==( const Face_Halfedge_circ<Iterator>& x, 
00156             const Face_Halfedge_circ<Iterator>& y ) 
00157 { 
00158   return x.base() == y.base();
00159 }
00160 
00162 template <class Iterator>
00163 inline
00164 bool 
00165 operator!=( const Face_Halfedge_circ<Iterator>& x, 
00166             const Face_Halfedge_circ<Iterator>& y ) 
00167 { 
00168   return !( x == y );
00169 }
00170 
00171 END_NAMESPACE_ADS
00172 
00173 #endif

Generated on Fri Aug 24 12:55:22 2007 for Algorithms and Data Structures Package by  doxygen 1.4.7