diff -r 666f914201fb -r 2fe1408b6811 epoc32/include/stdapis/boost/multi_array/index_gen.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/epoc32/include/stdapis/boost/multi_array/index_gen.hpp Tue Mar 16 16:12:26 2010 +0000 @@ -0,0 +1,81 @@ +// Copyright 2002 The Trustees of Indiana University. + +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// Boost.MultiArray Library +// Authors: Ronald Garcia +// Jeremy Siek +// Andrew Lumsdaine +// See http://www.boost.org/libs/multi_array for documentation. + +#ifndef BOOST_INDEX_GEN_RG071801_HPP +#define BOOST_INDEX_GEN_RG071801_HPP + +#include "boost/array.hpp" +#include "boost/multi_array/index_range.hpp" +#include "boost/multi_array/range_list.hpp" +#include "boost/multi_array/types.hpp" +#include <algorithm> +#include <cstddef> + +namespace boost { +namespace detail { +namespace multi_array { + + +template <int NumRanges, int NumDims> +struct index_gen { +private: + typedef ::boost::detail::multi_array::index index; + typedef ::boost::detail::multi_array::size_type size_type; + typedef index_range<index,size_type> range; +public: + template <int Dims, int Ranges> + struct gen_type { + typedef index_gen<Ranges,Dims> type; + }; + + typedef typename range_list_generator<range,NumRanges>::type range_list; + range_list ranges_; + + index_gen() { } + + template <int ND> + explicit index_gen(const index_gen<NumRanges-1,ND>& rhs, + const range& r) + { + std::copy(rhs.ranges_.begin(),rhs.ranges_.end(),ranges_.begin()); + *ranges_.rbegin() = r; + } + + index_gen<NumRanges+1,NumDims+1> + operator[](const range& r) const + { + index_gen<NumRanges+1,NumDims+1> tmp; + std::copy(ranges_.begin(),ranges_.end(),tmp.ranges_.begin()); + *tmp.ranges_.rbegin() = r; + return tmp; + } + + index_gen<NumRanges+1,NumDims> + operator[](index idx) const + { + index_gen<NumRanges+1,NumDims> tmp; + std::copy(ranges_.begin(),ranges_.end(),tmp.ranges_.begin()); + *tmp.ranges_.rbegin() = range(idx); + return tmp; + } + + static index_gen<0,0> indices() { + return index_gen<0,0>(); + } +}; + +} // namespace multi_array +} // namespace detail +} // namespace boost + + +#endif // BOOST_INDEX_GEN_RG071801_HPP