CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
iterator_imp_specific.h
Go to the documentation of this file.
1 #ifndef Candidate_iterator_imp_specific_h
2 #define Candidate_iterator_imp_specific_h
3 
8 
9 namespace reco {
10  namespace candidate {
11 
12  template<typename C>
14  private:
15  typedef typename C::iterator iterator;
16  public:
17  typedef ptrdiff_t difference_type;
19  explicit iterator_imp_specific( const iterator & it ) : i ( it ) { }
23  void increase() { ++i; }
24  void decrease() { ++i; }
25  void increase( difference_type d ) { i += d; }
26  void decrease( difference_type d ) { i -= d; }
27  bool equal_to( const iterator_imp * o ) const { return i == dc( o ); }
28  bool less_than( const iterator_imp * o ) const { return i < dc( o ); }
29  void assign( const iterator_imp * o ) { i = dc( o ); }
30  Candidate & deref() const { return * i; }
31  difference_type difference( const iterator_imp * o ) const { return i - dc( o ); }
32  private:
33  const iterator & dc( const iterator_imp * o ) const {
34  return dynamic_cast<const iterator_imp_specific *>( o )->i;
35  }
36  iterator & dc( iterator_imp * o ) const {
37  return dynamic_cast<iterator_imp_specific *>( o )->i;
38  }
40  };
41 
42  template<typename C>
44  typedef ptrdiff_t difference_type;
49  void increase() { }
50  void decrease() { }
51  void increase( difference_type d ) { }
52  void decrease( difference_type d ) { }
53  bool equal_to( const iterator_imp * o ) const { return true; }
54  bool less_than( const iterator_imp * o ) const { return false; }
55  void assign( const iterator_imp * o ) { }
56  Candidate & deref() const {
57  throw cms::Exception("Invalid Dereference")
58  << "can't dereference an interator for a Candidate with read-only"
59  << "references o daughters";
60  }
61  difference_type difference( const iterator_imp * o ) const { return 0; }
62  };
63 
64  }
65 }
66 
67 #endif
iterator & dc(iterator_imp *o) const
bool equal_to(const iterator_imp *o) const
difference_type difference(const iterator_imp *o) const
bool equal_to(const iterator_imp *o) const
difference_type difference(const iterator_imp *o) const
iterator_imp_specific_dummy * clone() const
bool less_than(const iterator_imp *o) const
iterator_imp_specific * clone() const
bool less_than(const iterator_imp *o) const
const_iterator_imp_specific< C > * const_clone() const
const iterator & dc(const iterator_imp *o) const
const_iterator_imp_specific_dummy< C > * const_clone() const