336 Accessor_IPDataVecInLocAsm accessor_ip_data_vec_in_loc_asm,
337 Accessor_CurrentLevelFromIPDataVecElement
338 accessor_current_level_from_ip_data_vec_element)
340 return {std::forward<Accessor_IPDataVecInLocAsm>(
341 accessor_ip_data_vec_in_loc_asm),
342 std::forward<Accessor_CurrentLevelFromIPDataVecElement>(
343 accessor_current_level_from_ip_data_vec_element)};
373 Callback
const& callback, ReflectionDataTuple
const& reflection_data,
374 Accessor_IPDataVecInLocAsm
const& accessor_ip_data_vec_in_loc_asm,
375 Accessor_CurrentLevelFromIPDataVecElement
const&
376 accessor_current_level_from_ip_data_vec_element)
379 "The passed reflection data is not a std::tuple.");
381 std::is_same_v<ReflectionDataTuple,
382 boost::mp11::mp_rename<ReflectionDataTuple, std::tuple>>,
383 "The passed reflection data is not a std::tuple.");
385 boost::mp11::tuple_for_each(
387 [&accessor_ip_data_vec_in_loc_asm,
388 &accessor_current_level_from_ip_data_vec_element,
389 &callback]<
typename Class,
typename Accessor>(
392 using MemberRef = std::invoke_result_t<Accessor, Class const&>;
393 using Member = std::remove_cvref_t<MemberRef>;
395 auto accessor_member_from_ip_data_vec_element =
396 [accessor_next_level = refl_data.
accessor,
397 accessor_current_level_from_ip_data_vec_element](
398 auto const& ip_data_vec_element) -> Member
const&
400 return accessor_next_level(
401 accessor_current_level_from_ip_data_vec_element(
402 ip_data_vec_element));
409 accessor_ip_data_vec_in_loc_asm,
410 accessor_member_from_ip_data_vec_element);
415 "The current member is not reflectable, so we "
416 "expect it to be raw data.");
420 assert(!refl_data.
name.empty());
421 callback(refl_data.
name, num_comp,
423 accessor_ip_data_vec_in_loc_asm,
424 accessor_member_from_ip_data_vec_element));