BALL  1.4.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
baseFilterIterator.h
Go to the documentation of this file.
1 #ifndef BALL_LINALG_BASEFILTERITERATOR_H
2 #define BALL_LINALG_BASEFILTERITERATOR_H
3 
4 namespace BALL
5 {
6 
16  template <class Predicate, class IteratorBase >
18  {
19 
20  public:
21 
23  Predicate predicate_;
24  IteratorBase iterator_;
25 
27  typedef typename IteratorBase::container_type Container;
29  typedef typename IteratorBase::value_type DataType;
31  typedef typename IteratorBase::difference_type Position;
33  typedef typename IteratorBase::traits_type Traits;
35  typedef typename IteratorBase::value_type value_type;
37  typedef typename IteratorBase::difference_type difference_type;
39  typedef typename IteratorBase::pointer pointer;
41  typedef typename IteratorBase::reference reference;
43  typedef std::input_iterator_tag iterator_category;
44 
50 
51 
55 
58  BaseFilterIterator(Predicate p, IteratorBase it)
59  : predicate_(p), iterator_(it)
60  {
61  }
62 
65  : predicate_(iterator.predicate_), iterator_(iterator.iterator_)
66  {
67  }
68 
72 
76 
82  {
83  predicate_ = iterator.predicate_;
84  iterator_ = iterator.iterator_;
85  return *this;
86  }
87 
89  void swap(BaseFilterIterator& iterator)
90  {
91  std::swap(predicate_, iterator.predicate_);
92  std::swap(iterator_, iterator.iterator_);
93  }
95 
99 
101  void invalidate() { iterator_.invalidate(); }
102 
104  void setTraits(const Traits& traits) { iterator_.setTraits(traits); }
105 
107  const Traits& getTraits() const { return iterator_.getTraits(); }
108 
110  Traits& getTraits() { return iterator_.getTraits(); }
111 
113  void setPredicate(const Predicate& predicate) { predicate_ = predicate; }
114 
116  const Predicate& getPredicate() const { return predicate_; }
117 
119  Predicate& getPredicate() { return predicate_; }
120 
122  const Container* getContainer() const { return iterator_.getContainer(); }
124 
128 
133  operator const Position& () const { return iterator_(); }
134 
136  reference operator * () const { return *iterator_; }
137 
139  pointer operator -> () const { return iterator_.operator->(); }
141 
145 
147  bool operator == (const BaseFilterIterator& iterator) const { return (iterator_ == iterator.iterator_); }
148 
150  bool operator != (const BaseFilterIterator& iterator) const { return !(iterator_ == iterator.iterator_); }
151 
153  bool operator == (const IteratorBase& iterator) const { return (iterator_ == iterator); }
154 
156  bool operator != (const IteratorBase& iterator) const { return !(iterator_ == iterator); }
157 
162  bool isSingular() const { return iterator_.isSingular(); }
163 
167  bool isValid() const { return iterator_.isValid(); }
168 
170  bool operator + () const { return +(iterator_); }
171 
173  bool operator - () const { return -(iterator_); }
175 
176  protected:
177 
181  BaseFilterIterator(const Container& container)
182  : iterator_(container)
183  {
184  }
185  };
186 
187 
188 } // namespace BALL
189 
190 #endif // BALL_KERNEL_BASEFILTERITERATOR_H