-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinitializer_list.h
57 lines (47 loc) · 1.39 KB
/
initializer_list.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#pragma once
#include <initializer_list>
#include <boost/mp11.hpp>
#include <limits>
#include <utility>
namespace foelsche
{
namespace init_list
{
using namespace boost::mp11;
template<typename SIZE>
struct getTypeFromSize
{ typedef typename std::conditional<
(SIZE::value <= std::numeric_limits<unsigned int>::max()),
typename std::conditional<
(SIZE::value <= std::numeric_limits<unsigned short>::max()),
typename std::conditional<
(SIZE::value <= std::numeric_limits<unsigned char>::max()),
unsigned char,
unsigned short
>::type,
unsigned int
>::type,
std::size_t
>::type type;
};
template<typename LIST, typename TYPE>
struct convertToStdInitializerList;
template<typename ...ITEMS, typename TYPE>
struct convertToStdInitializerList<mp_list<ITEMS...>, TYPE>
{ static constexpr const std::initializer_list<TYPE> value =
{ ITEMS::value...
};
};
template<typename ...ITEMS, typename TYPE>
constexpr const std::initializer_list<TYPE> convertToStdInitializerList<mp_list<ITEMS...>, TYPE>::value;
template<typename LIST_A, typename LIST_B, typename TYPE>
struct convertToPair
{ static_assert(mp_size<LIST_A>::value == mp_size<LIST_B>::value, "size must be identical!");
typedef std::initializer_list<TYPE> IL;
static constexpr const std::pair<IL, IL> value =
{ convertToStdInitializerList<LIST_A, TYPE>::value,
convertToStdInitializerList<LIST_B, TYPE>::value
};
};
}
}