framework
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
string_expansion.hpp
Go to the documentation of this file.
1 // Copyright (C) 2012 iwg molw5
2 // For conditions of distribution and use, see copyright notice in COPYING
3 
13 #pragma once
14 
15 namespace framework
16 {
17  namespace detail
18  {
19  template <unsigned int N>
20  constexpr char extract_char (char const (&string) [N], unsigned int index)
21  {
22  return index < N ? string[index] : '\0';
23  }
24  }
25 }
26 
27 #ifndef FRAMEWORK_NO_BOOST
28  #include <boost/preprocessor/repetition/repeat.hpp>
29  #include <boost/preprocessor/punctuation/comma_if.hpp>
30 
31  #define EXPAND_STRING_N_IMPL(z, n, data) \
32  BOOST_PP_COMMA_IF(n) framework::detail::extract_char(data, n)
33 
51  #define EXPAND_STRING_N(STRING, LENGTH) \
52  BOOST_PP_REPEAT(LENGTH, EXPAND_STRING_N_IMPL, STRING)
53 #else
54 
65  #define EXPAND_STRING(STRING) \
66  framework::detail::extract_char(STRING, 0), \
67  framework::detail::extract_char(STRING, 1), \
68  framework::detail::extract_char(STRING, 2), \
69  framework::detail::extract_char(STRING, 3), \
70  framework::detail::extract_char(STRING, 4), \
71  framework::detail::extract_char(STRING, 5), \
72  framework::detail::extract_char(STRING, 6), \
73  framework::detail::extract_char(STRING, 7), \
74  framework::detail::extract_char(STRING, 8), \
75  framework::detail::extract_char(STRING, 9), \
76  framework::detail::extract_char(STRING, 10), \
77  framework::detail::extract_char(STRING, 11), \
78  framework::detail::extract_char(STRING, 12), \
79  framework::detail::extract_char(STRING, 13), \
80  framework::detail::extract_char(STRING, 14), \
81  framework::detail::extract_char(STRING, 15), \
82  framework::detail::extract_char(STRING, 16), \
83  framework::detail::extract_char(STRING, 17), \
84  framework::detail::extract_char(STRING, 18), \
85  framework::detail::extract_char(STRING, 19), \
86  framework::detail::extract_char(STRING, 20), \
87  framework::detail::extract_char(STRING, 21), \
88  framework::detail::extract_char(STRING, 22), \
89  framework::detail::extract_char(STRING, 23), \
90  framework::detail::extract_char(STRING, 24), \
91  framework::detail::extract_char(STRING, 25), \
92  framework::detail::extract_char(STRING, 26), \
93  framework::detail::extract_char(STRING, 27), \
94  framework::detail::extract_char(STRING, 28), \
95  framework::detail::extract_char(STRING, 29), \
96  framework::detail::extract_char(STRING, 30), \
97  framework::detail::extract_char(STRING, 31), \
98  framework::detail::extract_char(STRING, 32), \
99  framework::detail::extract_char(STRING, 33), \
100  framework::detail::extract_char(STRING, 34), \
101  framework::detail::extract_char(STRING, 35), \
102  framework::detail::extract_char(STRING, 36), \
103  framework::detail::extract_char(STRING, 37), \
104  framework::detail::extract_char(STRING, 38), \
105  framework::detail::extract_char(STRING, 39), \
106  framework::detail::extract_char(STRING, 40), \
107  framework::detail::extract_char(STRING, 41), \
108  framework::detail::extract_char(STRING, 42), \
109  framework::detail::extract_char(STRING, 43), \
110  framework::detail::extract_char(STRING, 44), \
111  framework::detail::extract_char(STRING, 45), \
112  framework::detail::extract_char(STRING, 46), \
113  framework::detail::extract_char(STRING, 47), \
114  framework::detail::extract_char(STRING, 48), \
115  framework::detail::extract_char(STRING, 49), \
116  framework::detail::extract_char(STRING, 50), \
117  framework::detail::extract_char(STRING, 51), \
118  framework::detail::extract_char(STRING, 52), \
119  framework::detail::extract_char(STRING, 53), \
120  framework::detail::extract_char(STRING, 54), \
121  framework::detail::extract_char(STRING, 55), \
122  framework::detail::extract_char(STRING, 56), \
123  framework::detail::extract_char(STRING, 57), \
124  framework::detail::extract_char(STRING, 58), \
125  framework::detail::extract_char(STRING, 59), \
126  framework::detail::extract_char(STRING, 60), \
127  framework::detail::extract_char(STRING, 61), \
128  framework::detail::extract_char(STRING, 62), \
129  framework::detail::extract_char(STRING, 63), \
130  framework::detail::extract_char(STRING, 64), \
131  framework::detail::extract_char(STRING, 65), \
132  framework::detail::extract_char(STRING, 66), \
133  framework::detail::extract_char(STRING, 67), \
134  framework::detail::extract_char(STRING, 68), \
135  framework::detail::extract_char(STRING, 69), \
136  framework::detail::extract_char(STRING, 70), \
137  framework::detail::extract_char(STRING, 71), \
138  framework::detail::extract_char(STRING, 72), \
139  framework::detail::extract_char(STRING, 73), \
140  framework::detail::extract_char(STRING, 74), \
141  framework::detail::extract_char(STRING, 75), \
142  framework::detail::extract_char(STRING, 76), \
143  framework::detail::extract_char(STRING, 77), \
144  framework::detail::extract_char(STRING, 78), \
145  framework::detail::extract_char(STRING, 79), \
146  framework::detail::extract_char(STRING, 80), \
147  framework::detail::extract_char(STRING, 81), \
148  framework::detail::extract_char(STRING, 82), \
149  framework::detail::extract_char(STRING, 83), \
150  framework::detail::extract_char(STRING, 84), \
151  framework::detail::extract_char(STRING, 85), \
152  framework::detail::extract_char(STRING, 86), \
153  framework::detail::extract_char(STRING, 87), \
154  framework::detail::extract_char(STRING, 88), \
155  framework::detail::extract_char(STRING, 89), \
156  framework::detail::extract_char(STRING, 90), \
157  framework::detail::extract_char(STRING, 91), \
158  framework::detail::extract_char(STRING, 92), \
159  framework::detail::extract_char(STRING, 93), \
160  framework::detail::extract_char(STRING, 94), \
161  framework::detail::extract_char(STRING, 95), \
162  framework::detail::extract_char(STRING, 96), \
163  framework::detail::extract_char(STRING, 97), \
164  framework::detail::extract_char(STRING, 98), \
165  framework::detail::extract_char(STRING, 99)
166 #endif