Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // times2_iterator.hpp Chris@16: // Chris@16: // Copyright 2006 Eric Niebler. Distributed under the Boost Chris@16: // Software License, Version 1.0. (See accompanying file Chris@16: // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: #ifndef BOOST_ACCUMULATORS_STATISTICS_TIMES2_ITERATOR_HPP_DE_01_01_2006 Chris@16: #define BOOST_ACCUMULATORS_STATISTICS_TIMES2_ITERATOR_HPP_DE_01_01_2006 Chris@16: Chris@16: #include Chris@101: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: namespace boost { namespace accumulators Chris@16: { Chris@16: Chris@16: namespace detail Chris@16: { Chris@16: typedef transform_iterator< Chris@16: std::binder1st > Chris@16: , counting_iterator Chris@16: > times2_iterator; Chris@16: Chris@16: inline times2_iterator make_times2_iterator(std::size_t i) Chris@16: { Chris@16: return make_transform_iterator( Chris@16: make_counting_iterator(i) Chris@16: , std::bind1st(std::multiplies(), 2) Chris@16: ); Chris@16: } Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // lvalue_index_iterator Chris@16: template Chris@16: struct lvalue_index_iterator Chris@16: : Base Chris@16: { Chris@101: lvalue_index_iterator() Chris@101: : Base() Chris@101: {} Chris@101: Chris@16: lvalue_index_iterator(Base base) Chris@16: : Base(base) Chris@16: { Chris@16: } Chris@16: Chris@16: typename Base::reference operator [](typename Base::difference_type n) const Chris@16: { Chris@16: return *(*this + n); Chris@16: } Chris@16: }; Chris@16: } // namespace detail Chris@16: Chris@16: }} Chris@16: Chris@16: #endif