@@ -160,17 +160,54 @@ inline constexpr auto CountMembers = [] {
160
160
161
161
constexpr size_t MaxReflectionMemerCount = 5 ; // should go as high as 256, I guess?
162
162
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
+
163
200
template <class T , size_t N = CountMembers<T>>
164
201
requires (N <= MaxReflectionMemerCount)
165
202
inline constexpr decltype (auto ) ToTuple(T&& t) noexcept
166
203
{
167
204
if constexpr (N == 0 )
168
205
return std::tuple {};
169
-
206
+ // clang-format off
170
207
else if constexpr (N == 1 )
171
208
{
172
- auto & [p ] = t;
173
- return std::tie (p );
209
+ auto & [p0 ] = t;
210
+ return std::tie (p0 );
174
211
}
175
212
else if constexpr (N == 2 )
176
213
{
@@ -192,6 +229,82 @@ inline constexpr decltype(auto) ToTuple(T&& t) noexcept
192
229
auto & [p0, p1, p2, p3, p4] = t;
193
230
return std::tie (p0, p1, p2, p3, p4);
194
231
}
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
195
308
}
196
309
197
310
template <class T >
0 commit comments