]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | /////////////////////////////////////////////////////////////////////////////// |
2 | // times2_iterator.hpp | |
3 | // | |
4 | // Copyright 2006 Eric Niebler. Distributed under the Boost | |
5 | // Software License, Version 1.0. (See accompanying file | |
6 | // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | |
7 | ||
8 | #ifndef BOOST_ACCUMULATORS_STATISTICS_TIMES2_ITERATOR_HPP_DE_01_01_2006 | |
9 | #define BOOST_ACCUMULATORS_STATISTICS_TIMES2_ITERATOR_HPP_DE_01_01_2006 | |
10 | ||
11 | #include <functional> | |
12 | #include <boost/detail/workaround.hpp> | |
13 | #include <boost/range/begin.hpp> | |
14 | #include <boost/range/end.hpp> | |
15 | #include <boost/range/iterator_range.hpp> | |
16 | #include <boost/iterator/transform_iterator.hpp> | |
17 | #include <boost/iterator/counting_iterator.hpp> | |
18 | #include <boost/iterator/permutation_iterator.hpp> | |
19 | ||
20 | namespace boost { namespace accumulators | |
21 | { | |
22 | ||
23 | namespace detail | |
24 | { | |
25 | typedef transform_iterator< | |
26 | std::binder1st<std::multiplies<std::size_t> > | |
27 | , counting_iterator<std::size_t> | |
28 | > times2_iterator; | |
29 | ||
30 | inline times2_iterator make_times2_iterator(std::size_t i) | |
31 | { | |
32 | return make_transform_iterator( | |
33 | make_counting_iterator(i) | |
34 | , std::bind1st(std::multiplies<std::size_t>(), 2) | |
35 | ); | |
36 | } | |
37 | ||
38 | /////////////////////////////////////////////////////////////////////////////// | |
39 | // lvalue_index_iterator | |
40 | template<typename Base> | |
41 | struct lvalue_index_iterator | |
42 | : Base | |
43 | { | |
44 | lvalue_index_iterator() | |
45 | : Base() | |
46 | {} | |
47 | ||
48 | lvalue_index_iterator(Base base) | |
49 | : Base(base) | |
50 | { | |
51 | } | |
52 | ||
53 | typename Base::reference operator [](typename Base::difference_type n) const | |
54 | { | |
55 | return *(*this + n); | |
56 | } | |
57 | }; | |
58 | } // namespace detail | |
59 | ||
60 | }} | |
61 | ||
62 | #endif |