/usr/include/boost/multi_array
Edit: /usr/include/boost/multi_array/index_gen.hpp (2051B)
// 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_MULTI_ARRAY_INDEX_GEN_HPP
#define BOOST_MULTI_ARRAY_INDEX_GEN_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
#include
namespace boost {
namespace detail {
namespace multi_array {
template
struct index_gen {
private:
typedef ::boost::detail::multi_array::index index;
typedef ::boost::detail::multi_array::size_type size_type;
typedef index_range range;
public:
template
struct gen_type {
typedef index_gen type;
};
typedef typename range_list_generator::type range_list;
range_list ranges_;
index_gen() { }
template
explicit index_gen(const index_gen& rhs,
const range& r)
{
std::copy(rhs.ranges_.begin(),rhs.ranges_.end(),ranges_.begin());
*ranges_.rbegin() = r;
}
index_gen
operator[](const range& r) const
{
index_gen tmp;
std::copy(ranges_.begin(),ranges_.end(),tmp.ranges_.begin());
*tmp.ranges_.rbegin() = r;
return tmp;
}
index_gen
operator[](index idx) const
{
index_gen 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