// 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 RANGE_LIST_RG072501_HPP | |
#define RANGE_LIST_RG072501_HPP | |
// | |
// range_list.hpp - helper to build boost::arrays for *_set types | |
// | |
#include "boost/array.hpp" | |
namespace boost { | |
namespace detail { | |
namespace multi_array { | |
///////////////////////////////////////////////////////////////////////// | |
// choose range list begins | |
// | |
struct choose_range_list_n { | |
template <typename T, std::size_t NumRanges> | |
struct bind { | |
typedef boost::array<T,NumRanges> type; | |
}; | |
}; | |
struct choose_range_list_zero { | |
template <typename T, std::size_t NumRanges> | |
struct bind { | |
typedef boost::array<T,1> type; | |
}; | |
}; | |
template <std::size_t NumRanges> | |
struct range_list_gen_helper { | |
typedef choose_range_list_n choice; | |
}; | |
template <> | |
struct range_list_gen_helper<0> { | |
typedef choose_range_list_zero choice; | |
}; | |
template <typename T, std::size_t NumRanges> | |
struct range_list_generator { | |
private: | |
typedef typename range_list_gen_helper<NumRanges>::choice Choice; | |
public: | |
typedef typename Choice::template bind<T,NumRanges>::type type; | |
}; | |
// | |
// choose range list ends | |
///////////////////////////////////////////////////////////////////////// | |
} // namespace multi_array | |
} // namespace detail | |
} // namespace boost | |
#endif // RANGE_LIST_RG072501_HPP |