cpp-reflect
C++ Reflection and Annotations Library
Loading...
Searching...
No Matches
reflect Module Reference

Exported Modules

module  std
 
module  std
 
module  std
 
module  std
 

Concepts

concept  refl::is_type_info
 
concept  refl::Reflected
 

Classes

struct  refl::is_std_array< T >
 
struct  refl::is_std_array< std::array< T, N > >
 
struct  refl::visitor< Derived >
 
struct  refl::detail::type_name_holder< T >
 
struct  refl::detail::type_name_holder_pack< Pack >
 
struct  refl::detail::type_name_holder_pack_1t1i< Pack >
 
struct  refl::detail::pack_type_id< T >
 
struct  refl::detail::pack_type_id< Pack< Ts... > >
 
struct  refl::detail::pack_type_id< Pack< T, I > >
 
struct  refl::field< T, I >
 
struct  refl::method< T, I >
 
struct  refl_pack< T >
 
struct  refl_int_pack< T >
 
class  refl::any
 
class  refl::any_ref
 
struct  refl::field_info
 
struct  refl::field_path
 
struct  refl::method_info
 
struct  refl::get_pack_param_ids< T >
 
struct  refl::get_pack_param_ids< Pack< Args... > >
 
struct  refl::get_pack_param_ids< Pack< T, I > >
 
class  refl::type_info
 
struct  std::hash< refl::field_path >
 
class  refl::archive
 

Enumerations

enum class  refl::access_spec : unsigned char { NONE = 0U , PRIVATE = 1U , PROTECTED = 2U , PUBLIC = 3U }
 
enum  refl::eq_policy::policy_e { refl::eq_policy::shallow , refl::eq_policy::deep , refl::eq_policy::skip }
 

Typedefs

using type = typename packtl::get<I, typename static_type_info<T>::field_types>::type
 
template<std::size_t J>
using metadata_type
 
using type = typename packtl::get<I, typename static_type_info<T>::method_types>::type
 
template<typename T>
using refl::static_type_info = typename T::__type_info__
 
using refl::type_id_t = std::size_t
 
template<typename... T>
using refl_tuple = std::tuple<T...>
 

Functions

 visitor ()=default
 
virtual ~visitor ()
 
template<Reflected R>
void visit (const R &obj)
 
template<typename T>
void visit_value (const T &obj)
 
template<typename T>
void visit_reference (const T &obj)
 
template<typename T>
void visit_pointer (const T *obj)
 
template<refl::Reflected R>
void visit_obj (const R &obj)
 
template<refl::Reflected R, typename Field>
void visit_obj_field (const R &obj)
 
template<typename T>
void visit_iterable (const T &iterable)
 
template<typename T>
void visit_iterable_element (const T &item)
 
template<typename T>
void visit_tuple (const T &it)
 
template<typename T>
void visit_tuple_element (const T &item)
 
template<typename T>
void visit_any (const T &it)
 
template<std::size_t... Is>
constexpr auto refl::detail::substring_as_array (std::string_view s, std::index_sequence< Is... >)
 
template<typename T>
constexpr auto refl::detail::type_name_array ()
 
template<template< typename... > typename Pack>
constexpr auto refl::detail::type_name_array_pack ()
 
template<template< typename T, std::size_t I > typename Pack>
constexpr auto refl::detail::type_name_array_pack_1t1i ()
 
template<typename T>
constexpr auto refl::detail::type_name_str ()
 
template<template< typename... > typename Pack>
constexpr auto refl::detail::type_name_str_pack ()
 
template<template< typename T, std::size_t I > typename Pack>
constexpr auto refl::detail::type_name_str_pack_1t1i ()
 
constexpr std::uint64_t refl::detail::fnv1a_partial (std::uint64_t partial, std::string_view s)
 
constexpr std::uint64_t refl::detail::fnv1a_append (std::uint64_t partial, std::string_view s)
 
constexpr std::uint64_t refl::detail::fnv1a (std::string_view s)
 
template<typename MetadataType, std::size_t StartFrom>
requires (not has_metadata<MetadataType>)
static int find_metadata ()
 
template<typename MetadataType, std::size_t StartFrom>
requires (has_metadata<MetadataType> and StartFrom < metadata_count)
static consteval MetadataType find_metadata ()
 
static const std::remove_reference_t< type > & from_instance (const T &instance)
 
static std::remove_reference_t< type > & from_instance (T &instance)
 
template<Reflected R, template< Reflected, typename > typename Fun, typename... Args>
auto refl::for_each_field (Args &&... args)
 
template<Reflected R>
bool refl::deep_eq (const R &lhs, const R &rhs)
 
 any ()
 
template<typename T>
requires (not std::same_as<std::remove_reference_t<T>, any>)
 any (const T &t)
 
template<typename T>
requires (not std::same_as<std::remove_reference_t<T>, any>)
 any (T &&t)
 
template<typename T, typename... Args>
requires (not std::is_reference_v<T>)
static any make (Args &&... args)
 
template<typename T>
requires (not std::same_as<std::remove_reference_t<T>, any>)
static any make (const T &value)
 
static any make (const refl::type_info &t_info, void *ptr)
 
 ~any ()
 
 any (const any &other)
 
anyoperator= (const any &other)
 
template<typename T>
bool is () const
 
bool is (const refl::type_info &tinfo) const
 
template<typename T>
T & as ()
 
template<typename T>
const T & as () const
 
const type_infotype () const
 
bool is_null () const
 
void * data ()
 
const void * data () const
 
bool operator== (const any &other) const
 
 any_ref ()
 
template<typename T>
requires (not std::same_as<std::remove_reference_t<T>, any_ref> and not std::same_as< std::remove_reference_t<T>, any>)
 any_ref (T &t)
 
template<typename T>
requires (not std::same_as<std::remove_reference_t<T>, any_ref> and not std::same_as< std::remove_reference_t<T>, any>)
 any_ref (T *t)
 
 any_ref (const refl::type_info &t_info, void *ptr)
 
 any_ref (refl::any &owner_any)
 
 ~any_ref ()
 
 any_ref (const any_ref &other)
 
any_refoperator= (const any_ref &other)
 
template<typename T>
bool is () const
 
bool is (const refl::type_info &tinfo) const
 
template<typename T>
T & as ()
 
template<typename T>
const T & as () const
 
const type_infotype () const
 
bool is_null () const
 
void * data ()
 
const void * data () const
 
type_id_t refl::get_id_from_info_getter (const type_info &(*tif)())
 
void * get_ptr (void *obj) const
 
template<typename T>
T & get_ref (void *obj) const
 
template<typename MetadataType>
bool has_metadata () const
 
template<typename MetadataType>
const MetadataType & get_metadata () const
 
 field_path (const field_info *field)
 
 field_path (std::initializer_list< const field_info * > fields)
 
const type_infotype () const
 
void * get_ptr (void *obj) const
 
template<typename T>
T & get_ref (void *obj) const
 
bool operator== (const field_path &other) const
 
static std::vector< type_id_tvector ()
 
static std::vector< type_id_tvector ()
 
static std::vector< type_id_tvector ()
 
template<typename T>
static const type_infofrom ()
 
const std::string & name () const
 
const auto & fields () const
 
std::optional< const field_info * > field_by_name (const std::string &name) const
 
std::optional< const field_info * > field_by_offset (const std::size_t &offset) const
 
std::size_t hash_code () const
 
std::size_t id () const
 
template<typename T>
bool is_type () const
 
template<template< typename... > typename Pack>
bool is_pack () const
 
template<template< typename T, std::size_t S > typename Pack>
bool is_pack_1t1i () const
 
bool is_const () const
 
bool is_indirect () const
 
bool is_rval_ref () const
 
bool is_lval_ref () const
 
bool is_ptr () const
 
const type_infoindirect_type () const
 
std::vector< const type_info * > pack_parameter_types () const
 
void * make_copy_of (const void *ptr) const
 
void assign_copy_of (const void *src, void *dest) const
 
bool equality (const void *lhs, const void *rhs) const
 
std::size_t operator() (const refl::field_path &path) const
 
 archive ()=default
 
anyoperator[] (const std::string &path)
 
anyat (const std::string &path)
 
const anyat (const std::string &path) const
 
bool contains (const std::string &path) const
 

Variables

static constexpr auto value = type_name_array<T>()
 
static constexpr auto value = type_name_array_pack<Pack>()
 
static constexpr auto value = type_name_array_pack_1t1i<Pack>()
 
template<typename T>
constexpr auto refl::type_name = detail::type_name_str<T>()
 
template<template< typename... > typename Pack>
constexpr auto refl::pack_name = detail::type_name_str_pack<Pack>()
 
template<template< typename T, std::size_t I > typename Pack>
constexpr auto refl::pack_1t1i_name = detail::type_name_str_pack_1t1i<Pack>()
 
template<typename T>
constexpr type_id_t refl::type_id = detail::fnv1a(type_name<T>)
 
template<template< typename... > typename Pack>
constexpr type_id_t refl::pack_id = detail::fnv1a(pack_name<Pack>)
 
template<template< typename T, std::size_t I > typename Pack>
constexpr type_id_t refl::pack_1t1i_id = detail::fnv1a(pack_1t1i_name<Pack>)
 
static constexpr type_id_t value = type_id<T>
 
static constexpr type_id_t value = pack_id<Pack>
 
static constexpr type_id_t value = pack_1t1i_id<Pack>
 
template<typename T>
constexpr type_id_t refl::pack_type_id = detail::pack_type_id<T>::value
 
static constexpr std::size_t index = I
 
static constexpr const char * name = static_type_info<T>::field_names[I]
 
static constexpr type_id_t type_id = refl::type_id<type>
 
static constexpr std::size_t size
 
static constexpr std::size_t offset
 
static constexpr access_spec access
 
static constexpr bool is_reference = std::is_reference_v<type>
 
static constexpr bool is_pointer = std::is_pointer_v<type>
 
static constexpr std::size_t metadata_offset
 
static constexpr std::size_t metadata_count
 
template<std::size_t J>
static constexpr decltype(std::get< metadata_offset+J >(static_type_info< T >::field_metadata)) metadata_item = std::get<metadata_offset + J>(static_type_info<T>::field_metadata)
 
template<typename MetadataType>
static constexpr bool has_metadata
 
template<typename MetadataType>
static constexpr MetadataType get_metadata = find_metadata<MetadataType, 0>()
 
template<refl::Reflected T>
constexpr std::size_t refl::field_count
 
template<refl::Reflected T, std::size_t I>
constexpr decltype(std::get< I >(static_type_info< T >::field_metadata)) refl::field_meta
 
static constexpr std::size_t index = I
 
static constexpr const char * name = static_type_info<T>::method_names[I]
 
static constexpr access_spec access
 
template<refl::Reflected T>
constexpr std::size_t refl::method_count
 
std::map< type_id_t, type_inforefl::type_registry {}
 
std::size_t index
 
std::string name
 
std::size_t size
 
std::size_t offset
 
access_spec access_type
 
type_id_t type_id
 
const type_info &(* type )()
 
std::vector< std::pair< const type_info &(*)(), void * > > metadata
 
std::size_t index
 
std::string name
 
access_spec access_type
 

Files

file  src/refl.cppm
 !
 
file  src/_types.cppm
 !
 
file  src/accessors.cppm
 !
 
file  src/any.cppm
 !
 
file  src/archive.cppm
 
file  src/equality.cppm
 
file  src/type_info.cppm
 
file  src/type_name.cppm
 !
 
file  src/visitor.cppm