#include namespace internal { #define def_subface_func_list(func_name) \ static constexpr std::array(surface_type::max_count)> func_name##_func_list = { \ &plane_function_impl::func_name, \ &sphere_function_impl::func_name, \ &cylinder_function_impl::func_name, \ nullptr} def_subface_func_list(eval_sdf); def_subface_func_list(eval_sdf_grad); def_subface_func_list(map_param_to_point); def_subface_func_list(map_point_to_param); def_subface_func_list(eval_du_constraint); def_subface_func_list(eval_dv_constraint); def_subface_func_list(eval_intersection); #undef def_subface_func_list #define def_export_get_function_ptr_impl(func_name) \ PE_API func_name##_ptr_t get_##func_name##_ptr(surface_type type) \ { \ return func_name##_func_list[static_cast>(type)]; \ } def_export_get_function_ptr_impl(eval_sdf); def_export_get_function_ptr_impl(eval_sdf_grad); def_export_get_function_ptr_impl(map_param_to_point); def_export_get_function_ptr_impl(map_point_to_param); def_export_get_function_ptr_impl(eval_du_constraint); def_export_get_function_ptr_impl(eval_dv_constraint); def_export_get_function_ptr_impl(eval_intersection); #undef def_export_get_function_ptr_impl } // namespace internal