1 /*=============================================================================
2     Copyright (c) 2012 Paul Fultz II
3     seq.h
4     Distributed under the Boost Software License, Version 1.0. (See accompanying
5     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 ==============================================================================*/
7 
8 #ifndef BOOST_HOF_GUARD_FUNCTION_DETAIL_SEQ_H
9 #define BOOST_HOF_GUARD_FUNCTION_DETAIL_SEQ_H
10 
11 #include <cstdlib>
12 
13 namespace boost { namespace hof {
14 
15 namespace detail {
16 
17 template<std::size_t ...>
18 struct seq
19 {
20     typedef seq type;
21 };
22 
23 template <class, class>
24 struct merge_seq;
25 
26 template <size_t... Xs, size_t... Ys>
27 struct merge_seq<seq<Xs...>, seq<Ys...>>
28 : seq<Xs..., (sizeof...(Xs)+Ys)...>
29 {};
30 
31 template<std::size_t N>
32 struct gens
33 : merge_seq<
34     typename gens<N/2>::type,
35     typename gens<N - N/2>::type
36 >
37 {};
38 
39 template<> struct gens<0> : seq<> {};
40 template<> struct gens<1> : seq<0> {};
41 
42 
43 }
44 }} // namespace boost::hof
45 
46 #endif
47