ThePEG  1.8.0
DIterator.h
1 // -*- C++ -*-
2 //
3 // DIterator.h is a part of ThePEG - Toolkit for HEP Event Generation
4 // Copyright (C) 1999-2011 Leif Lonnblad
5 //
6 // ThePEG is licenced under version 2 of the GPL, see COPYING for details.
7 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
8 //
9 #ifndef ThePEG_DIterator_H
10 #define ThePEG_DIterator_H
11 // This is the declaration of the DIterator class.
12 
13 #include <iterator>
14 
15 namespace ThePEG {
16 
17 template <typename BaseIterator>
29 class DIterator {
30 
31 public:
32 
34  typedef std::iterator_traits<BaseIterator> Traits;
36  typedef typename Traits::iterator_category iterator_category;
38  typedef typename Traits::difference_type difference_type;
40  typedef typename Traits::value_type PtrType;
42  typedef std::iterator_traits<PtrType> PtrTraits;
44  typedef typename PtrTraits::value_type value_type;
46  typedef typename PtrTraits::pointer pointer;
48  typedef typename PtrTraits::reference reference;
49 
50 public:
51 
55  DIterator(const BaseIterator & in): i(in) {}
56 
60  DIterator(const DIterator & pi): i(pi.i) {}
61 
62 public:
63 
67  reference operator*() const { return **i; }
68 
72  pointer operator->() const { return *i; }
73 
77  DIterator & operator=(const DIterator & pi) { i = pi.i; return *this; }
78 
82  DIterator & operator=(const BaseIterator & pi) { i = pi; return *this; }
83 
87  DIterator & operator++() { ++i; return *this; }
89  DIterator operator++(int) { DIterator tmp(*this); ++i; return tmp; }
91  DIterator & operator--() { --i; return *this; }
93  DIterator operator--(int) { DIterator tmp(*this); --i; return tmp; }
95  DIterator & operator+=(int n) { i += n; return *this; }
97  DIterator operator+(int n) { return DIterator(i + n); }
99  DIterator & operator-=(int n) { i -= n; return *this; }
101  DIterator operator-(int n) { return DIterator(i - n); }
103 
108  reference operator[](difference_type n) { return *(i[n]); }
109 
113  difference_type operator-(const DIterator & pi) { return i - pi.i; }
114 
118  bool operator==(const DIterator & pi) { return i == pi.i; }
120  bool operator!=(const DIterator & pi) { return i != pi.i; }
122  bool operator<(const DIterator & pi) { return i < pi.i; }
124  bool operator>(const DIterator & pi) { return i > pi.i; }
126  bool operator<=(const DIterator & pi) { return i <= pi.i; }
128  bool operator>=(const DIterator & pi) { return i >= pi.i; }
130  bool operator==(const BaseIterator & bi) { return i == bi; }
132  bool operator!=(const BaseIterator & bi) { return i != bi; }
134  bool operator<(const BaseIterator & bi) { return i < bi; }
136  bool operator>(const BaseIterator & bi) { return i > bi; }
138  bool operator<=(const BaseIterator & bi) { return i <= bi; }
140  bool operator>=(const BaseIterator & bi) { return i >= bi; }
142 
143 private:
144 
148  BaseIterator i;
149 
150 private:
151 
156 
157 };
158 
159 }
160 
161 #endif /* ThePEG_DIterator_H */
PtrTraits::pointer pointer
Forward typedef from underlying iterator.
Definition: DIterator.h:46
DIterator(const DIterator &pi)
Copy constructor.
Definition: DIterator.h:60
DIterator operator+(int n)
Get an iterator n steps forward.
Definition: DIterator.h:97
pointer operator->() const
Select member from the pointer referred to by the underlying iterator.
Definition: DIterator.h:72
bool operator>=(const DIterator &pi)
Test for greater or equal.
Definition: DIterator.h:128
bool operator<(const BaseIterator &bi)
Test for less.
Definition: DIterator.h:134
DIterator & operator=(const DIterator &pi)
Standard assignment operator.
Definition: DIterator.h:77
bool operator<=(const BaseIterator &bi)
Test for less or equal.
Definition: DIterator.h:138
BaseIterator i
The underlying standard iterator.
Definition: DIterator.h:148
bool operator>(const BaseIterator &bi)
Test for greater.
Definition: DIterator.h:136
bool operator!=(const DIterator &pi)
Test for inequality.
Definition: DIterator.h:120
This is the main namespace within which all identifiers in ThePEG are declared.
Definition: FactoryBase.h:28
bool operator>=(const BaseIterator &bi)
Test for greater or equal.
Definition: DIterator.h:140
bool operator>(const DIterator &pi)
Test for greater.
Definition: DIterator.h:124
bool operator<(const DIterator &pi)
Test for less.
Definition: DIterator.h:122
difference_type operator-(const DIterator &pi)
Return the distance to the given iterator.
Definition: DIterator.h:113
DIterator & operator=(const BaseIterator &pi)
Assignment from a a normal iterator.
Definition: DIterator.h:82
DIterator operator-(int n)
Get an iterator n steps backward.
Definition: DIterator.h:101
Traits::value_type PtrType
Forward typedef from underlying iterator.
Definition: DIterator.h:40
bool operator!=(const BaseIterator &bi)
Test for inequality.
Definition: DIterator.h:132
reference operator[](difference_type n)
Select a pointer with the given index and return a reference to the object pointed to...
Definition: DIterator.h:108
DIterator & operator+=(int n)
Jump forward n steps.
Definition: DIterator.h:95
Traits::difference_type difference_type
Forward typedef from underlying iterator.
Definition: DIterator.h:38
bool operator==(const BaseIterator &bi)
Test for equality.
Definition: DIterator.h:130
DIterator & operator++()
Pre increment the underlying iterator.
Definition: DIterator.h:87
DIterator(const BaseIterator &in)
Constructor from a normal iterator.
Definition: DIterator.h:55
bool operator==(const DIterator &pi)
Test for equality.
Definition: DIterator.h:118
PtrTraits::reference reference
Forward typedef from underlying iterator.
Definition: DIterator.h:48
DIterator & operator--()
Pre decrement the underlying iterator.
Definition: DIterator.h:91
DIterator operator++(int)
Post increment the underlying iterator.
Definition: DIterator.h:89
reference operator*() const
Dereference the pointer referred to by the underlying iterator.
Definition: DIterator.h:67
std::iterator_traits< PtrType > PtrTraits
Forward typedef from underlying iterator.
Definition: DIterator.h:42
DIterator()
The default constructor should never be used.
Definition: DIterator.h:155
std::iterator_traits< BaseIterator > Traits
Forward typedef from underlying iterator.
Definition: DIterator.h:34
Traits::iterator_category iterator_category
Forward typedef from underlying iterator.
Definition: DIterator.h:36
bool operator<=(const DIterator &pi)
Test for less or equal.
Definition: DIterator.h:126
DIterator is an iterator adaptor class.
Definition: DIterator.h:29
DIterator & operator-=(int n)
Jump backward n steps.
Definition: DIterator.h:99
PtrTraits::value_type value_type
Forward typedef from underlying iterator.
Definition: DIterator.h:44
DIterator operator--(int)
Post decrement the underlying iterator.
Definition: DIterator.h:93