PolyBoRi
TransformedIterator.h
Go to the documentation of this file.
1 // -*- c++ -*-
2 //*****************************************************************************
14 //*****************************************************************************
15 
16 #ifndef polybori_iterators_TransformedIterator_h_
17 #define polybori_iterators_TransformedIterator_h_
18 
19 // include basic definitions
20 #include <polybori/pbori_defs.h>
21 
22 #include <boost/iterator/iterator_facade.hpp>
23 #include <iterator>
24 
26 
27 template <class UnaryFunc>
29 public:
30  typedef typename UnaryFunc::result_type result_type;
31  typedef typename UnaryFunc::argument_type argument_type;
32 };
33 
34 template <class ResultType, class ArgType>
35 class UnaryOperatorTraits<ResultType (*)(ArgType)> {
36  public:
37  typedef ResultType result_type;
38  typedef ArgType argument_type;
39 };
40 
47 template <class IteratorType, class OperatorType>
49  public boost::iterator_facade<
50  TransformedIterator<IteratorType, OperatorType>,
51  typename UnaryOperatorTraits<OperatorType>::result_type,
52  std::forward_iterator_tag,
53  typename UnaryOperatorTraits<OperatorType>::result_type > {
54 
55  typedef IteratorType iterator;
56  typedef TransformedIterator self;
57 
58 public:
59  typedef OperatorType operator_type;
60  typedef typename operator_type::result_type result_type;
61 
63  TransformedIterator(iterator iter, const operator_type& func):
64  m_iter(iter), m_func(func) { }
65 
66 
68  void increment() { ++m_iter; }
69 
71  result_type dereference() const { return m_func(*m_iter); }
72 
74  bool equal(const self& rhs) const { return m_iter == rhs.m_iter; }
75 
76 private:
77  iterator m_iter;
78  const operator_type& m_func;
79 };
80 
82 
83 #endif /* polybori_TransformedIterator_h_ */
This class defines the iterator of Trnasformed sequence.
Definition: TransformedIterator.h:48
void increment()
Increment operation.
Definition: TransformedIterator.h:68
#define END_NAMESPACE_PBORI
Finish project's namespace.
Definition: pbori_defs.h:77
TransformedIterator(iterator iter, const operator_type &func)
Construct from given iterator and unary functional.
Definition: TransformedIterator.h:63
#define BEGIN_NAMESPACE_PBORI
Start project's namespace.
Definition: pbori_defs.h:74
ArgType argument_type
Definition: TransformedIterator.h:38
operator_type::result_type result_type
Definition: TransformedIterator.h:60
UnaryFunc::argument_type argument_type
Definition: TransformedIterator.h:31
result_type dereference() const
Constant dereference operator.
Definition: TransformedIterator.h:71
UnaryFunc::result_type result_type
Definition: TransformedIterator.h:30
OperatorType operator_type
Definition: TransformedIterator.h:59
Definition: TransformedIterator.h:28
bool equal(const self &rhs) const
Equality check.
Definition: TransformedIterator.h:74
ResultType result_type
Definition: TransformedIterator.h:37