BALL  1.4.1
baseIterator.h
Go to the documentation of this file.
00001 // -*- Mode: C++; tab-width: 2; -*-
00002 // vi: set ts=2:
00003 //
00004 
00005 #ifndef BALL_CONCEPT_BASEITERATOR_H
00006 #define BALL_CONCEPT_BASEITERATOR_H
00007 
00008 #ifndef BALL_CONFIG_CONFIG_H
00009 # include <BALL/CONFIG/config.h>
00010 #endif
00011 
00012 #ifndef BALL_COMMON_GLOBAL_H
00013 # include <BALL/COMMON/global.h>
00014 #endif
00015 
00016 #ifndef BALL_COMMON_EXCEPTION_H
00017 # include <BALL/COMMON/exception.h>
00018 #endif
00019 
00020 namespace BALL 
00021 {
00022 
00063   template <typename Container, typename DataType, typename Position, typename Traits>
00064   class BaseIterator
00065   {
00066     public:
00067 
00073 
00074     typedef DataType  value_type;
00076     typedef Position  difference_type;
00078     typedef const DataType* pointer;
00080     typedef const DataType& reference;
00082     typedef std::input_iterator_tag iterator_category;
00084 
00088 
00089     BALL_INLINE BaseIterator()  {}
00090   
00092     BALL_INLINE BaseIterator(const BaseIterator& iterator) 
00093       : traits_(iterator.traits_)
00094     {
00095     }
00096 
00098     BALL_INLINE ~BaseIterator()  {}
00100 
00104 
00109     BALL_INLINE BaseIterator& operator = (const BaseIterator& iterator) 
00110     {
00111       traits_ = iterator.traits_;
00112       return *this;
00113     }
00114       
00116     BALL_INLINE void swap(BaseIterator& iterator)  { std::swap(traits_, iterator.traits_); }
00118 
00122 
00124     BALL_INLINE void invalidate()  { traits_.invalidate(); }
00125 
00127     BALL_INLINE void setTraits(const Traits& traits)  { traits_ = traits; }
00128 
00130     BALL_INLINE const Traits& getTraits() const  { return traits_; }
00131 
00133     BALL_INLINE Traits& getTraits()  { return traits_; }
00134 
00136     BALL_INLINE const Container* getContainer() const  { return traits_.getContainer(); }
00138 
00142 
00147     BALL_INLINE operator const Position& () const  { return traits_.getPosition(); }
00148 
00150     BALL_INLINE reference operator * () const  { return (reference)traits_.getData(); }
00151 
00153     BALL_INLINE pointer operator -> () const  { return (pointer)&traits_.getData(); }
00155 
00159 
00161     BALL_INLINE bool operator == (const BaseIterator& iterator) const  { return (traits_ == iterator.traits_); }
00162 
00164     BALL_INLINE bool operator != (const BaseIterator& iterator) const  { return !(traits_ == iterator.traits_); }
00165 
00170     BALL_INLINE bool isSingular() const  { return traits_.isSingular(); }
00171 
00175     BALL_INLINE bool isValid() const  { return traits_.isValid(); }
00176 
00178     BALL_INLINE bool operator + () const  { return traits_.isValid(); }
00179 
00181     BALL_INLINE bool operator - () const  { return !traits_.isValid(); }
00183 
00184     protected:
00185 
00189     BALL_INLINE BaseIterator(const Container& container) 
00190       : traits_(container)
00191     {
00192     }
00193 
00194     private:
00195 
00197     Traits traits_;
00198   };
00199 
00200 
00201 } // namespace BALL
00202 
00203 #endif // BALL_CONCEPT_BASEITERATOR_H
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines