BALL  1.4.2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
MATHS/LINALG/baseIterator.h
Go to the documentation of this file.
1 #ifndef BALL_LINALG_BASEITERATOR_H
2 #define BALL_LINALG_BASEITERATOR_H
3 
4 namespace BALL
5 {
6 
16  template <typename Container, typename DataType, typename Position, typename Traits>
17  class BaseIterator
18  {
19  public:
20 
26 
27  typedef DataType value_type;
31  typedef const DataType* pointer;
33  typedef const DataType& reference;
35  typedef Container container_type;
37  typedef Traits traits_type;
39  typedef std::input_iterator_tag iterator_category;
41 
45 
47 
49  BaseIterator(const BaseIterator& iterator)
50  : traits_(iterator.traits_)
51  {
52  }
53 
57 
61 
67  {
68  traits_ = iterator.traits_;
69  return *this;
70  }
71 
73  void swap(BaseIterator& iterator) { std::swap(traits_, iterator.traits_); }
75 
79 
81  void invalidate() { traits_.invalidate(); }
82 
84  void setTraits(const Traits& traits) { traits_ = traits; }
85 
87  const Traits& getTraits() const { return traits_; }
88 
90  Traits& getTraits() { return traits_; }
91 
93  const Container* getContainer() const { return traits_.getContainer(); }
95 
99 
104  operator const Position& () const { return traits_.getPosition(); }
105 
107  reference operator * () const { return (reference)traits_.getData(); }
108 
110  pointer operator -> () const { return (pointer)&traits_.getData(); }
112 
116 
118  bool operator == (const BaseIterator& iterator) const { return (traits_ == iterator.traits_); }
119 
121  bool operator != (const BaseIterator& iterator) const { return !(traits_ == iterator.traits_); }
122 
127  bool isSingular() const { return traits_.isSingular(); }
128 
132  bool isValid() const { return traits_.isValid(); }
133 
135  bool operator + () const { return traits_.isValid(); }
136 
138  bool operator - () const { return !traits_.isValid(); }
140 
141  protected:
142 
146  BaseIterator(const Container& container)
147  : traits_(container)
148  {
149  }
150 
151  private:
152 
154  Traits traits_;
155  };
156 
157 
158 } // namespace BALL
159 
160 #endif // BALL_KERNEL_BASEITERATOR_H