BALL  1.4.1
baseIterator.h
Go to the documentation of this file.
00001 #ifndef BALL_LINALG_BASEITERATOR_H
00002 #define BALL_LINALG_BASEITERATOR_H
00003 
00004 namespace BALL
00005 {
00006 
00016   template <typename Container, typename DataType, typename Position, typename Traits>
00017   class BaseIterator
00018   {
00019     public:
00020 
00026 
00027     typedef DataType  value_type;
00029     typedef Position  difference_type;
00031     typedef const DataType* pointer;
00033     typedef const DataType& reference;    
00035     typedef Container container_type;   
00037     typedef Traits  traits_type;
00039     typedef std::input_iterator_tag iterator_category;
00041 
00045 
00046     BaseIterator() {}
00047   
00049     BaseIterator(const BaseIterator& iterator)
00050      : traits_(iterator.traits_)
00051     {
00052     }
00053 
00055     ~BaseIterator() {}
00057 
00061 
00066     BaseIterator& operator = (const BaseIterator& iterator)
00067     {
00068       traits_ = iterator.traits_;
00069       return *this;
00070     }
00071       
00073     void swap(BaseIterator& iterator) { std::swap(traits_, iterator.traits_); }
00075 
00079 
00081     void invalidate() { traits_.invalidate(); }
00082 
00084     void setTraits(const Traits& traits) { traits_ = traits; }
00085 
00087     const Traits& getTraits() const { return traits_; }
00088 
00090     Traits& getTraits() { return traits_; }
00091 
00093     const Container* getContainer() const { return traits_.getContainer(); }
00095 
00099 
00104     operator const Position& () const { return traits_.getPosition(); }
00105 
00107     reference operator * () const { return (reference)traits_.getData(); }
00108 
00110     pointer operator -> () const { return (pointer)&traits_.getData(); }
00112 
00116 
00118     bool operator == (const BaseIterator& iterator) const { return (traits_ == iterator.traits_); }
00119 
00121     bool operator != (const BaseIterator& iterator) const { return !(traits_ == iterator.traits_); }
00122 
00127     bool isSingular() const { return traits_.isSingular(); }
00128 
00132     bool isValid() const { return traits_.isValid(); }
00133 
00135     bool operator + () const { return traits_.isValid(); }
00136 
00138     bool operator - () const { return !traits_.isValid(); }
00140 
00141     protected:
00142 
00146     BaseIterator(const Container& container)
00147       : traits_(container)
00148     {
00149     }
00150 
00151     private:
00152 
00154     Traits traits_;
00155   };
00156 
00157 
00158 } // namespace BALL
00159 
00160 #endif // BALL_KERNEL_BASEITERATOR_H
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines