329 Accessor_IPDataVecInLocAsm accessor_ip_data_vec_in_loc_asm,
330 Accessor_CurrentLevelFromIPDataVecElement
331 accessor_current_level_from_ip_data_vec_element)
333 return {std::forward<Accessor_IPDataVecInLocAsm>(
334 accessor_ip_data_vec_in_loc_asm),
335 std::forward<Accessor_CurrentLevelFromIPDataVecElement>(
336 accessor_current_level_from_ip_data_vec_element)};
366 Callback
const& callback, ReflectionDataTuple
const& reflection_data,
367 Accessor_IPDataVecInLocAsm
const& accessor_ip_data_vec_in_loc_asm,
368 Accessor_CurrentLevelFromIPDataVecElement
const&
369 accessor_current_level_from_ip_data_vec_element)
372 "The passed reflection data is not a std::tuple.");
374 std::is_same_v<ReflectionDataTuple,
375 boost::mp11::mp_rename<ReflectionDataTuple, std::tuple>>,
376 "The passed reflection data is not a std::tuple.");
378 boost::mp11::tuple_for_each(
380 [&accessor_ip_data_vec_in_loc_asm,
381 &accessor_current_level_from_ip_data_vec_element,
382 &callback]<
typename Class,
typename Accessor>(
385 using MemberRef = std::invoke_result_t<Accessor, Class const&>;
386 using Member = std::remove_cvref_t<MemberRef>;
388 auto accessor_member_from_ip_data_vec_element =
389 [accessor_next_level = refl_data.
accessor,
390 accessor_current_level_from_ip_data_vec_element](
391 auto const& ip_data_vec_element) -> Member
const&
393 return accessor_next_level(
394 accessor_current_level_from_ip_data_vec_element(
395 ip_data_vec_element));
402 accessor_ip_data_vec_in_loc_asm,
403 accessor_member_from_ip_data_vec_element);
408 "The current member is not reflectable, so we "
409 "expect it to be raw data.");
413 assert(!refl_data.
name.empty());
414 callback(refl_data.
name, num_comp,
416 accessor_ip_data_vec_in_loc_asm,
417 accessor_member_from_ip_data_vec_element));