BALL  1.4.1
baseFilterIterator.h
Go to the documentation of this file.
00001 #ifndef BALL_LINALG_BASEFILTERITERATOR_H
00002 #define BALL_LINALG_BASEFILTERITERATOR_H
00003 
00004 namespace BALL
00005 {
00006 
00016   template <class Predicate, class IteratorBase >
00017   class BaseFilterIterator
00018   {
00019 
00020     public:
00021 
00023     Predicate predicate_;
00024     IteratorBase iterator_;
00025     
00027     typedef typename IteratorBase::container_type Container;
00029     typedef typename IteratorBase::value_type DataType;
00031     typedef typename IteratorBase::difference_type  Position;
00033     typedef typename IteratorBase::traits_type  Traits;
00035     typedef typename IteratorBase::value_type value_type;
00037     typedef typename IteratorBase::difference_type  difference_type;
00039     typedef typename IteratorBase::pointer  pointer;
00041     typedef typename IteratorBase::reference  reference;
00043     typedef std::input_iterator_tag iterator_category;
00044 
00050 
00051 
00055 
00056     BaseFilterIterator() {}
00058     BaseFilterIterator(Predicate p, IteratorBase it)
00059       :     predicate_(p), iterator_(it)
00060     {
00061     }
00062   
00064     BaseFilterIterator(const BaseFilterIterator& iterator)
00065       : predicate_(iterator.predicate_), iterator_(iterator.iterator_)
00066     {
00067     }
00068 
00070     ~BaseFilterIterator() {}
00072 
00076 
00081     BaseFilterIterator& operator = (const BaseFilterIterator& iterator)
00082     {
00083       predicate_ = iterator.predicate_;
00084       iterator_  = iterator.iterator_;
00085       return *this;
00086     }
00087       
00089     void swap(BaseFilterIterator& iterator) 
00090     { 
00091       std::swap(predicate_, iterator.predicate_); 
00092       std::swap(iterator_, iterator.iterator_);
00093     }
00095 
00099 
00101     void invalidate() { iterator_.invalidate(); }
00102 
00104     void setTraits(const Traits& traits) { iterator_.setTraits(traits); }
00105 
00107     const Traits& getTraits() const { return iterator_.getTraits(); }
00108 
00110     Traits& getTraits() { return iterator_.getTraits(); }
00111 
00113     void setPredicate(const Predicate& predicate) { predicate_ = predicate; }
00114 
00116     const Predicate& getPredicate() const { return predicate_; }
00117 
00119     Predicate& getPredicate() { return predicate_; }
00120 
00122     const Container* getContainer() const { return iterator_.getContainer(); }
00124 
00128 
00133       operator const Position& () const { return iterator_(); }
00134 
00136     reference operator * () const { return *iterator_; }
00137 
00139     pointer operator -> () const { return iterator_.operator->(); }
00141 
00145 
00147     bool operator == (const BaseFilterIterator& iterator) const { return (iterator_ == iterator.iterator_); }
00148 
00150     bool operator != (const BaseFilterIterator& iterator) const { return !(iterator_ == iterator.iterator_); }
00151 
00153     bool operator == (const IteratorBase& iterator) const { return (iterator_ == iterator); }
00154 
00156     bool operator != (const IteratorBase& iterator) const { return !(iterator_ == iterator); }
00157 
00162     bool isSingular() const { return iterator_.isSingular(); }
00163 
00167     bool isValid() const { return iterator_.isValid(); }
00168 
00170     bool operator + () const { return +(iterator_); }
00171 
00173     bool operator - () const { return -(iterator_); }
00175 
00176     protected:
00177 
00181     BaseFilterIterator(const Container& container)
00182       :       iterator_(container)
00183     {
00184     }
00185   };
00186 
00187 
00188 } // namespace BALL
00189 
00190 #endif // BALL_KERNEL_BASEFILTERITERATOR_H
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines