baseIterator.h

Go to the documentation of this file.
00001 // -*- Mode: C++; tab-width: 2; -*-
00002 // vi: set ts=2:
00003 //
00004 // $Id: baseIterator.h,v 1.33 2003/08/26 08:04:06 oliver Exp $
00005 //
00006 
00007 #ifndef BALL_CONCEPT_BASEITERATOR_H
00008 #define BALL_CONCEPT_BASEITERATOR_H
00009 
00010 #ifndef BALL_CONFIG_CONFIG_H
00011 # include <BALL/CONFIG/config.h>
00012 #endif
00013 
00014 #ifndef BALL_COMMON_GLOBAL_H
00015 # include <BALL/COMMON/global.h>
00016 #endif
00017 
00018 #ifndef BALL_COMMON_EXCEPTION_H
00019 # include <BALL/COMMON/exception.h>
00020 #endif
00021 
00022 namespace BALL 
00023 {
00024 
00065   template <typename Container, typename DataType, typename Position, typename Traits>
00066   class BaseIterator
00067   {
00068     public:
00069 
00075 
00076     typedef DataType  value_type;
00078     typedef Position  difference_type;
00080     typedef const DataType* pointer;
00082     typedef const DataType& reference;
00084     typedef std::input_iterator_tag iterator_category;
00086 
00090 
00091     BALL_INLINE BaseIterator()  {}
00092   
00094     BALL_INLINE BaseIterator(const BaseIterator& iterator) 
00095       : traits_(iterator.traits_)
00096     {
00097     }
00098 
00100     BALL_INLINE ~BaseIterator()  {}
00102 
00106 
00111     BALL_INLINE BaseIterator& operator = (const BaseIterator& iterator) 
00112     {
00113       traits_ = iterator.traits_;
00114       return *this;
00115     }
00116       
00118     BALL_INLINE void swap(BaseIterator& iterator)  { std::swap(traits_, iterator.traits_); }
00120 
00124 
00126     BALL_INLINE void invalidate()  { traits_.invalidate(); }
00127 
00129     BALL_INLINE void setTraits(const Traits& traits)  { traits_ = traits; }
00130 
00132     BALL_INLINE const Traits& getTraits() const  { return traits_; }
00133 
00135     BALL_INLINE Traits& getTraits()  { return traits_; }
00136 
00138     BALL_INLINE const Container* getContainer() const  { return traits_.getContainer(); }
00140 
00144 
00149     BALL_INLINE operator const Position& () const  { return traits_.getPosition(); }
00150 
00152     BALL_INLINE reference operator * () const  { return (reference)traits_.getData(); }
00153 
00155     BALL_INLINE pointer operator -> () const  { return (pointer)&traits_.getData(); }
00157 
00161 
00163     BALL_INLINE bool operator == (const BaseIterator& iterator) const  { return (traits_ == iterator.traits_); }
00164 
00166     BALL_INLINE bool operator != (const BaseIterator& iterator) const  { return !(traits_ == iterator.traits_); }
00167 
00172     BALL_INLINE bool isSingular() const  { return traits_.isSingular(); }
00173 
00177     BALL_INLINE bool isValid() const  { return traits_.isValid(); }
00178 
00180     BALL_INLINE bool operator + () const  { return traits_.isValid(); }
00181 
00183     BALL_INLINE bool operator - () const  { return !traits_.isValid(); }
00185 
00186     protected:
00187 
00191     BALL_INLINE BaseIterator(const Container& container) 
00192       : traits_(container)
00193     {
00194     }
00195 
00196     private:
00197 
00199     Traits traits_;
00200   };
00201 
00202 
00203 } // namespace BALL
00204 
00205 #endif // BALL_CONCEPT_BASEITERATOR_H