]> git.lyx.org Git - lyx.git/blob - boost/boost/multi_array/range_list.hpp
2002-05-24 Lars Gullik Bj�nnes <larsbj@birdstep.com>
[lyx.git] / boost / boost / multi_array / range_list.hpp
1 #ifndef RANGE_LIST_RG072501_HPP
2 #define RANGE_LIST_RG072501_HPP
3 //
4 // range_list.hpp - helper to build boost::arrays for *_set types
5 //
6
7 #include "boost/array.hpp"
8
9 namespace boost {
10 namespace detail {
11 namespace multi_array {
12
13 /////////////////////////////////////////////////////////////////////////
14 // choose range list begins
15 //
16
17 struct choose_range_list_n {
18   template <typename T, std::size_t NumRanges>
19   struct bind {
20     typedef boost::array<T,NumRanges> type;
21   };
22 };
23
24 struct choose_range_list_zero {
25   template <typename T, std::size_t NumRanges>
26   struct bind {
27     typedef boost::array<T,1> type;
28   };
29 };
30
31
32 template <std::size_t NumRanges>
33 struct range_list_gen_helper {
34   typedef choose_range_list_n choice;
35 };
36
37 template <>
38 struct range_list_gen_helper<0> {
39   typedef choose_range_list_zero choice;
40 };
41
42 template <typename T, std::size_t NumRanges>
43 struct range_list_generator {
44 private:
45   typedef typename range_list_gen_helper<NumRanges>::choice Choice;
46 public:
47   typedef typename Choice::template bind<T,NumRanges>::type type;
48 };
49
50 //
51 // choose range list ends
52 /////////////////////////////////////////////////////////////////////////
53
54 } // namespace multi_array
55 } // namespace detail
56 } // namespace boost
57
58 #endif // RANGE_LIST_RG072501_HPP