@@ -368,15 +368,22 @@ extern "C" {
368
368
})
369
369
#endif
370
370
371
- #define MI_DECLARE_TRAVERSE_CB () \
371
+ #define MI_DECLARE_TRAVERSE_CB (...) \
372
+ DRJIT_INLINE auto traverse_1_cb_fields_ () { \
373
+ return drjit::tie (__VA_ARGS__); \
374
+ } \
375
+ DRJIT_INLINE auto traverse_1_cb_fields_ () const { \
376
+ return drjit::tie (__VA_ARGS__); \
377
+ } \
378
+ \
372
379
public: \
373
380
void traverse_1_cb_ro (void *payload, \
374
381
drjit::detail::traverse_callback_ro fn) \
375
382
const override ; \
376
383
void traverse_1_cb_rw ( \
377
384
void *payload, drjit::detail::traverse_callback_rw fn) override ;
378
385
379
- #define MI_IMPLEMENT_TRAVERSE_CB (Type, Base, ...) \
386
+ #define MI_IMPLEMENT_TRAVERSE_CB (Type, Base ) \
380
387
MI_VARIANT \
381
388
void Type<Float, Spectrum>::traverse_1_cb_ro ( \
382
389
void *payload, drjit::detail::traverse_callback_ro fn) const { \
@@ -391,7 +398,11 @@ extern "C" {
391
398
\
392
399
if constexpr (!std ::is_same_v<Base, drjit ::TraversableBase>) \
393
400
Base::traverse_1_cb_ro (payload, fn); \
394
- DRJIT_MAP (DR_TRAVERSE_MEMBER_RO, __VA_ARGS__) \
401
+ \
402
+ drjit::traverse_1 (this ->traverse_1_cb_fields_ (), \
403
+ [payload, fn](auto &x) { \
404
+ drjit::traverse_1_fn_ro (x, payload, fn); \
405
+ }); \
395
406
} \
396
407
MI_VARIANT \
397
408
void Type<Float, Spectrum>::traverse_1_cb_rw ( \
@@ -407,7 +418,10 @@ extern "C" {
407
418
\
408
419
if constexpr (!std ::is_same_v<Base, drjit ::TraversableBase>) \
409
420
Base::traverse_1_cb_rw (payload, fn); \
410
- DRJIT_MAP (DR_TRAVERSE_MEMBER_RW, __VA_ARGS__) \
421
+ drjit::traverse_1 (this ->traverse_1_cb_fields_ (), \
422
+ [payload, fn](auto &x) { \
423
+ drjit::traverse_1_fn_rw (x, payload, fn); \
424
+ }); \
411
425
}
412
426
413
427
// ! @}
0 commit comments