319 Accessor_IPDataVecInLocAsm accessor_ip_data_vec_in_loc_asm,
320 Accessor_CurrentLevelFromIPDataVecElement
321 accessor_current_level_from_ip_data_vec_element)
323 return {std::forward<Accessor_IPDataVecInLocAsm>(
324 accessor_ip_data_vec_in_loc_asm),
325 std::forward<Accessor_CurrentLevelFromIPDataVecElement>(
326 accessor_current_level_from_ip_data_vec_element)};
356 Callback
const& callback, ReflectionDataTuple
const& reflection_data,
357 Accessor_IPDataVecInLocAsm
const& accessor_ip_data_vec_in_loc_asm,
358 Accessor_CurrentLevelFromIPDataVecElement
const&
359 accessor_current_level_from_ip_data_vec_element)
362 "The passed reflection data is not a std::tuple.");
364 std::is_same_v<ReflectionDataTuple,
365 boost::mp11::mp_rename<ReflectionDataTuple, std::tuple>>,
366 "The passed reflection data is not a std::tuple.");
368 boost::mp11::tuple_for_each(
370 [&accessor_ip_data_vec_in_loc_asm,
371 &accessor_current_level_from_ip_data_vec_element,
372 &callback]<
typename Class,
typename Accessor>(
375 using MemberRef = std::invoke_result_t<Accessor, Class const&>;
376 using Member = std::remove_cvref_t<MemberRef>;
378 auto accessor_member_from_ip_data_vec_element =
379 [accessor_next_level = refl_data.
accessor,
380 accessor_current_level_from_ip_data_vec_element](
381 auto const& ip_data_vec_element) -> Member
const&
383 return accessor_next_level(
384 accessor_current_level_from_ip_data_vec_element(
385 ip_data_vec_element));
392 accessor_ip_data_vec_in_loc_asm,
393 accessor_member_from_ip_data_vec_element);
398 "The current member is not reflectable, so we "
399 "expect it to be raw data.");
403 assert(!refl_data.
name.empty());
404 callback(refl_data.
name, num_comp,
406 accessor_ip_data_vec_in_loc_asm,
407 accessor_member_from_ip_data_vec_element));