18template <
typename Type, std::
size_t Offset>
24template <
typename Type>
30export namespace refl {
39 template <refl::Reflected T, std::
size_t I>
41 static constexpr std::size_t
index = I;
43 using type =
typename packtl::get<I, typename static_type_info<T>::field_types>
::type;
45 static constexpr std::size_t
size =
46 packtl::get<I, typename static_type_info<T>::field_sizes>::value;
47 static constexpr std::size_t
offset =
48 packtl::get<I, typename static_type_info<T>::field_offsets>::value;
50 access_spec{packtl::get<I, typename static_type_info<T>::field_access_specifiers>::value};
53 static constexpr bool is_pointer = std::is_pointer_v<type>;
56 packtl::get<I, typename static_type_info<T>::field_metadata_offsets>::value;
58 packtl::get<I, typename static_type_info<T>::field_metadata_counts>::value;
60 template <std::
size_t J>
65 template <std::
size_t J>
70 template <
typename MetadataType>
71 static constexpr bool has_metadata = []<std::size_t... J>(std::index_sequence<J...>) ->
bool {
72 if constexpr ((std::same_as<const MetadataType, metadata_type<J>> or ...)) {
77 }(std::make_index_sequence<metadata_count>{});
79 template <
typename MetadataType, std::
size_t StartFrom>
85 template <
typename MetadataType, std::
size_t StartFrom>
88 if constexpr (std::same_as<const MetadataType, metadata_type<StartFrom>>) {
95 template <
typename MetadataType>
98 static const std::remove_reference_t<type>&
from_instance(
const T& instance) {
109 template <refl::Reflected T>
111 packtl::get_size<typename static_type_info<T>::field_types>::value;
113 template <refl::Reflected T, std::
size_t I>
117 template <refl::Reflected T, std::
size_t I>
119 static constexpr std::size_t
index = I;
121 using type =
typename packtl::get<I, typename static_type_info<T>::method_types>
::type;
123 access_spec{packtl::get<I, typename static_type_info<T>::method_access_specifiers>::value};
126 template <refl::Reflected T>
128 packtl::get_size<typename static_type_info<T>::method_types>::value;
130 template <Reflected R,
template <Reflected,
typename>
typename Fun,
typename... Args>
134 auto impl = [&]<std::size_t... I>(std::index_sequence<I...>) {
138 return impl(std::make_index_sequence<count>{});
constexpr type_id_t type_id
constexpr std::size_t field_count
auto for_each_field(Args &&... args)
typename T::__type_info__ static_type_info
constexpr decltype(std::get< I >(static_type_info< T >::field_metadata)) field_meta
constexpr std::size_t method_count
static constexpr MetadataType get_metadata
static constexpr type_id_t type_id
static constexpr std::size_t index
static std::remove_reference_t< type > & from_instance(T &instance)
static constexpr bool is_pointer
static const std::remove_reference_t< type > & from_instance(const T &instance)
static constexpr bool is_reference
static constexpr const char * name
static constexpr decltype(std::get< metadata_offset+J >(static_type_info< T >::field_metadata)) metadata_item
static constexpr bool has_metadata
typename packtl::get< I, typename static_type_info< T >::field_types >::type type
static constexpr std::size_t size
static constexpr std::size_t offset
typename std:: tuple_element< metadata_offset+J, decltype(static_type_info< T >::field_metadata)>::type metadata_type
static consteval MetadataType find_metadata()
static constexpr access_spec access
static constexpr std::size_t metadata_offset
static constexpr std::size_t metadata_count
static int find_metadata()
static constexpr const char * name
static constexpr access_spec access
typename packtl::get< I, typename static_type_info< T >::method_types >::type type
static constexpr std::size_t index
unsigned char offset_[Offset]