Skip to content

Commit c6b5488

Browse files
Merge pull request #4 from contour-terminal/improvement/toTuple_fill
Add more entries to ToTuple function and add elisp code
2 parents 9091dbd + a973d99 commit c6b5488

File tree

1 file changed

+116
-3
lines changed

1 file changed

+116
-3
lines changed

include/reflection-cpp/reflection.hpp

Lines changed: 116 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -160,17 +160,54 @@ inline constexpr auto CountMembers = [] {
160160

161161
constexpr size_t MaxReflectionMemerCount = 5; // should go as high as 256, I guess?
162162

163+
164+
/**
165+
166+
elisp functions to fill the ToTuple function
167+
168+
(defun create_params (n)
169+
(let ((res "") (counter 0))
170+
(while (< counter n)
171+
(setq res (concat res "p" (number-to-string counter)))
172+
(if (< counter (- n 1))
173+
(setq res (concat res ", "))
174+
)
175+
(setq counter (1+ counter)))
176+
res)
177+
)
178+
179+
(defun for_one_value (n)
180+
(setq params (create_params n))
181+
(concat " else if constexpr (N == " (number-to-string n) ")\n"
182+
" {\n"
183+
" auto& [" params "] = t;\n"
184+
" return std::tie(" params ");\n"
185+
" }\n"
186+
)
187+
)
188+
189+
(defun fill_ToTuple()
190+
(interactive)
191+
(let ((total 1))
192+
(while (<= total 20)
193+
(insert (for_one_value total))
194+
(setq total (+ total 1))
195+
total))
196+
)
197+
198+
**/
199+
163200
template <class T, size_t N = CountMembers<T>>
164201
requires(N <= MaxReflectionMemerCount)
165202
inline constexpr decltype(auto) ToTuple(T&& t) noexcept
166203
{
167204
if constexpr (N == 0)
168205
return std::tuple {};
169-
206+
//clang-format off
170207
else if constexpr (N == 1)
171208
{
172-
auto& [p] = t;
173-
return std::tie(p);
209+
auto& [p0] = t;
210+
return std::tie(p0);
174211
}
175212
else if constexpr (N == 2)
176213
{
@@ -192,6 +229,82 @@ inline constexpr decltype(auto) ToTuple(T&& t) noexcept
192229
auto& [p0, p1, p2, p3, p4] = t;
193230
return std::tie(p0, p1, p2, p3, p4);
194231
}
232+
else if constexpr (N == 6)
233+
{
234+
auto& [p0, p1, p2, p3, p4, p5] = t;
235+
return std::tie(p0, p1, p2, p3, p4, p5);
236+
}
237+
else if constexpr (N == 7)
238+
{
239+
auto& [p0, p1, p2, p3, p4, p5, p6] = t;
240+
return std::tie(p0, p1, p2, p3, p4, p5, p6);
241+
}
242+
else if constexpr (N == 8)
243+
{
244+
auto& [p0, p1, p2, p3, p4, p5, p6, p7] = t;
245+
return std::tie(p0, p1, p2, p3, p4, p5, p6, p7);
246+
}
247+
else if constexpr (N == 9)
248+
{
249+
auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8] = t;
250+
return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8);
251+
}
252+
else if constexpr (N == 10)
253+
{
254+
auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9] = t;
255+
return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
256+
}
257+
else if constexpr (N == 11)
258+
{
259+
auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10] = t;
260+
return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10);
261+
}
262+
else if constexpr (N == 12)
263+
{
264+
auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11] = t;
265+
return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11);
266+
}
267+
else if constexpr (N == 13)
268+
{
269+
auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12] = t;
270+
return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12);
271+
}
272+
else if constexpr (N == 14)
273+
{
274+
auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13] = t;
275+
return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13);
276+
}
277+
else if constexpr (N == 15)
278+
{
279+
auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14] = t;
280+
return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14);
281+
}
282+
else if constexpr (N == 16)
283+
{
284+
auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15] = t;
285+
return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15);
286+
}
287+
else if constexpr (N == 17)
288+
{
289+
auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16] = t;
290+
return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16);
291+
}
292+
else if constexpr (N == 18)
293+
{
294+
auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17] = t;
295+
return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17);
296+
}
297+
else if constexpr (N == 19)
298+
{
299+
auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18] = t;
300+
return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18);
301+
}
302+
else if constexpr (N == 20)
303+
{
304+
auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19] = t;
305+
return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19);
306+
}
307+
//clang-format on
195308
}
196309

197310
template <class T>

0 commit comments

Comments
 (0)