mirror of
https://github.com/BlackMATov/meta.hpp.git
synced 2025-12-16 14:09:02 +07:00
raw types api
This commit is contained in:
@@ -155,6 +155,7 @@
|
|||||||
| | |
|
| | |
|
||||||
| --------------------------------------------------- | ---------------- |
|
| --------------------------------------------------- | ---------------- |
|
||||||
| [type_id](./api/basics.md#type_id) | type_id |
|
| [type_id](./api/basics.md#type_id) | type_id |
|
||||||
|
| [type_base](./api/types.md#type_base) | type_base |
|
||||||
| [any_type](./api/types.md#any_type) | any_type |
|
| [any_type](./api/types.md#any_type) | any_type |
|
||||||
| [array_type](./api/types.md#array_type) | array_type |
|
| [array_type](./api/types.md#array_type) | array_type |
|
||||||
| [class_type](./api/types.md#class_type) | class_type |
|
| [class_type](./api/types.md#class_type) | class_type |
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
- [API Types](#api-types)
|
- [API Types](#api-types)
|
||||||
- [Classes](#classes)
|
- [Classes](#classes)
|
||||||
- [type\_id](#type_id)
|
- [type\_id](#type_id)
|
||||||
|
- [type\_base](#type_base)
|
||||||
- [any\_type](#any_type)
|
- [any\_type](#any_type)
|
||||||
- [array\_type](#array_type)
|
- [array\_type](#array_type)
|
||||||
- [class\_type](#class_type)
|
- [class\_type](#class_type)
|
||||||
@@ -22,30 +23,383 @@
|
|||||||
|
|
||||||
### type_id
|
### type_id
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
class type_id final {
|
||||||
|
public:
|
||||||
|
type_id() = default;
|
||||||
|
~type_id() = default;
|
||||||
|
|
||||||
|
type_id(type_id&&) = default;
|
||||||
|
type_id(const type_id&) = default;
|
||||||
|
|
||||||
|
type_id& operator=(type_id&&) = default;
|
||||||
|
type_id& operator=(const type_id&) = default;
|
||||||
|
|
||||||
|
bool is_valid() const noexcept;
|
||||||
|
explicit operator bool() const noexcept;
|
||||||
|
|
||||||
|
void swap(type_id& other) noexcept;
|
||||||
|
std::size_t get_hash() const noexcept;
|
||||||
|
|
||||||
|
bool operator==(const type_id& other) const noexcept;
|
||||||
|
std::strong_ordering operator<=>(const type_id& other) const noexcept;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
### type_base
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
template < type_family Type >
|
||||||
|
class type_base {
|
||||||
|
public:
|
||||||
|
using id_type = type_id;
|
||||||
|
|
||||||
|
type_base() = default;
|
||||||
|
|
||||||
|
explicit type_base(data_ptr data);
|
||||||
|
|
||||||
|
type_base(type_base&&) = default;
|
||||||
|
type_base(const type_base&) = default;
|
||||||
|
|
||||||
|
type_base& operator=(type_base&&) = default;
|
||||||
|
type_base& operator=(const type_base&) = default;
|
||||||
|
|
||||||
|
bool is_valid() const noexcept;
|
||||||
|
explicit operator bool() const noexcept;
|
||||||
|
|
||||||
|
std::size_t get_hash() const noexcept;
|
||||||
|
|
||||||
|
id_type get_id() const noexcept;
|
||||||
|
type_kind get_kind() const noexcept;
|
||||||
|
const metadata_map& get_metadata() const noexcept;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
### any_type
|
### any_type
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
class any_type final : public type_base<any_type> {
|
||||||
|
public:
|
||||||
|
using type_base<any_type>::type_base;
|
||||||
|
|
||||||
|
template < type_family Type >
|
||||||
|
any_type(const Type& other) noexcept;
|
||||||
|
|
||||||
|
template < type_family Type >
|
||||||
|
bool is() const noexcept;
|
||||||
|
bool is(type_kind kind) const noexcept;
|
||||||
|
|
||||||
|
template < type_family Type >
|
||||||
|
Type as() const noexcept;
|
||||||
|
|
||||||
|
template < typename F >
|
||||||
|
bool match(F&& f) const;
|
||||||
|
|
||||||
|
bool is_array() const noexcept;
|
||||||
|
bool is_class() const noexcept;
|
||||||
|
bool is_constructor() const noexcept;
|
||||||
|
bool is_destructor() const noexcept;
|
||||||
|
bool is_enum() const noexcept;
|
||||||
|
bool is_function() const noexcept;
|
||||||
|
bool is_member() const noexcept;
|
||||||
|
bool is_method() const noexcept;
|
||||||
|
bool is_nullptr() const noexcept;
|
||||||
|
bool is_number() const noexcept;
|
||||||
|
bool is_pointer() const noexcept;
|
||||||
|
bool is_reference() const noexcept;
|
||||||
|
bool is_void() const noexcept;
|
||||||
|
|
||||||
|
array_type as_array() const noexcept;
|
||||||
|
class_type as_class() const noexcept;
|
||||||
|
constructor_type as_constructor() const noexcept;
|
||||||
|
destructor_type as_destructor() const noexcept;
|
||||||
|
enum_type as_enum() const noexcept;
|
||||||
|
function_type as_function() const noexcept;
|
||||||
|
member_type as_member() const noexcept;
|
||||||
|
method_type as_method() const noexcept;
|
||||||
|
nullptr_type as_nullptr() const noexcept;
|
||||||
|
number_type as_number() const noexcept;
|
||||||
|
pointer_type as_pointer() const noexcept;
|
||||||
|
reference_type as_reference() const noexcept;
|
||||||
|
void_type as_void() const noexcept;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
### array_type
|
### array_type
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
class array_type final : public type_base<array_type> {
|
||||||
|
public:
|
||||||
|
using type_base<array_type>::type_base;
|
||||||
|
array_bitflags get_flags() const noexcept;
|
||||||
|
|
||||||
|
std::size_t get_extent() const noexcept;
|
||||||
|
any_type get_data_type() const noexcept;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
### class_type
|
### class_type
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
class class_type final : public type_base<class_type> {
|
||||||
|
public:
|
||||||
|
using type_base<class_type>::type_base;
|
||||||
|
class_bitflags get_flags() const noexcept;
|
||||||
|
|
||||||
|
std::size_t get_size() const noexcept;
|
||||||
|
std::size_t get_align() const noexcept;
|
||||||
|
|
||||||
|
std::size_t get_arity() const noexcept;
|
||||||
|
any_type get_argument_type(std::size_t position) const noexcept;
|
||||||
|
const uvalue& get_argument_value(std::size_t position) const noexcept;
|
||||||
|
const any_type_list& get_argument_types() const noexcept;
|
||||||
|
const uvalue_list& get_argument_values() const noexcept;
|
||||||
|
|
||||||
|
const class_list& get_base_classes() const noexcept;
|
||||||
|
const constructor_list& get_constructors() const noexcept;
|
||||||
|
const destructor_list& get_destructors() const noexcept;
|
||||||
|
const function_list& get_functions() const noexcept;
|
||||||
|
const member_list& get_members() const noexcept;
|
||||||
|
const method_list& get_methods() const noexcept;
|
||||||
|
const typedef_map& get_typedefs() const noexcept;
|
||||||
|
const variable_list& get_variables() const noexcept;
|
||||||
|
|
||||||
|
template < typename... Args >
|
||||||
|
uvalue create(Args&&... args) const;
|
||||||
|
template < typename... Args >
|
||||||
|
uvalue create_at(void* mem, Args&&... args) const;
|
||||||
|
|
||||||
|
template < typename Arg >
|
||||||
|
bool destroy(Arg&& arg) const;
|
||||||
|
bool destroy_at(void* mem) const;
|
||||||
|
|
||||||
|
template < class_kind Derived >
|
||||||
|
bool is_base_of() const noexcept;
|
||||||
|
bool is_base_of(const class_type& derived) const noexcept;
|
||||||
|
|
||||||
|
template < class_kind Derived >
|
||||||
|
bool is_direct_base_of() const noexcept;
|
||||||
|
bool is_direct_base_of(const class_type& derived) const noexcept;
|
||||||
|
|
||||||
|
template < class_kind Base >
|
||||||
|
bool is_derived_from() const noexcept;
|
||||||
|
bool is_derived_from(const class_type& base) const noexcept;
|
||||||
|
|
||||||
|
template < class_kind Base >
|
||||||
|
bool is_direct_derived_from() const noexcept;
|
||||||
|
bool is_direct_derived_from(const class_type& base) const noexcept;
|
||||||
|
|
||||||
|
function get_function(std::string_view name, bool recursively = true) const noexcept;
|
||||||
|
member get_member(std::string_view name, bool recursively = true) const noexcept;
|
||||||
|
method get_method(std::string_view name, bool recursively = true) const noexcept;
|
||||||
|
any_type get_typedef(std::string_view name, bool recursively = true) const noexcept;
|
||||||
|
variable get_variable(std::string_view name, bool recursively = true) const noexcept;
|
||||||
|
|
||||||
|
template < typename... Args >
|
||||||
|
constructor get_constructor_with() const noexcept;
|
||||||
|
template < typename Iter >
|
||||||
|
constructor get_constructor_with(Iter first, Iter last) const noexcept;
|
||||||
|
constructor get_constructor_with(std::span<const any_type> args) const noexcept;
|
||||||
|
constructor get_constructor_with(std::initializer_list<any_type> args) const noexcept;
|
||||||
|
|
||||||
|
destructor get_destructor() const noexcept;
|
||||||
|
|
||||||
|
template < typename... Args >
|
||||||
|
function get_function_with(
|
||||||
|
std::string_view name,
|
||||||
|
bool recursively = true
|
||||||
|
) const noexcept;
|
||||||
|
|
||||||
|
template < typename Iter >
|
||||||
|
function get_function_with(
|
||||||
|
std::string_view name,
|
||||||
|
Iter first,
|
||||||
|
Iter last,
|
||||||
|
bool recursively = true
|
||||||
|
) const noexcept;
|
||||||
|
|
||||||
|
function get_function_with(
|
||||||
|
std::string_view name,
|
||||||
|
std::span<const any_type> args,
|
||||||
|
bool recursively = true
|
||||||
|
) const noexcept;
|
||||||
|
|
||||||
|
function get_function_with(
|
||||||
|
std::string_view name,
|
||||||
|
std::initializer_list<any_type> args,
|
||||||
|
bool recursively = true
|
||||||
|
) const noexcept;
|
||||||
|
|
||||||
|
template < typename... Args >
|
||||||
|
method get_method_with(
|
||||||
|
std::string_view name,
|
||||||
|
bool recursively = true
|
||||||
|
) const noexcept;
|
||||||
|
|
||||||
|
template < typename Iter >
|
||||||
|
method get_method_with(
|
||||||
|
std::string_view name,
|
||||||
|
Iter first,
|
||||||
|
Iter last,
|
||||||
|
bool recursively = true
|
||||||
|
) const noexcept;
|
||||||
|
|
||||||
|
method get_method_with(
|
||||||
|
std::string_view name,
|
||||||
|
std::span<const any_type> args,
|
||||||
|
bool recursively = true
|
||||||
|
) const noexcept;
|
||||||
|
|
||||||
|
method get_method_with(
|
||||||
|
std::string_view name,
|
||||||
|
std::initializer_list<any_type> args,
|
||||||
|
bool recursively = true
|
||||||
|
) const noexcept;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
### constructor_type
|
### constructor_type
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
class constructor_type final : public type_base<constructor_type> {
|
||||||
|
public:
|
||||||
|
using type_base<constructor_type>::type_base;
|
||||||
|
constructor_bitflags get_flags() const noexcept;
|
||||||
|
|
||||||
|
std::size_t get_arity() const noexcept;
|
||||||
|
class_type get_owner_type() const noexcept;
|
||||||
|
any_type get_argument_type(std::size_t position) const noexcept;
|
||||||
|
const any_type_list& get_argument_types() const noexcept;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
### destructor_type
|
### destructor_type
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
class destructor_type final : public type_base<destructor_type> {
|
||||||
|
public:
|
||||||
|
using type_base<destructor_type>::type_base;
|
||||||
|
destructor_bitflags get_flags() const noexcept;
|
||||||
|
|
||||||
|
class_type get_owner_type() const noexcept;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
### enum_type
|
### enum_type
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
class enum_type final : public type_base<enum_type> {
|
||||||
|
public:
|
||||||
|
using type_base<enum_type>::type_base;
|
||||||
|
enum_bitflags get_flags() const noexcept;
|
||||||
|
|
||||||
|
number_type get_underlying_type() const noexcept;
|
||||||
|
|
||||||
|
const evalue_list& get_evalues() const noexcept;
|
||||||
|
|
||||||
|
evalue get_evalue(std::string_view name) const noexcept;
|
||||||
|
|
||||||
|
template < enum_kind Enum >
|
||||||
|
std::string_view value_to_name(Enum value) const noexcept;
|
||||||
|
const uvalue& name_to_value(std::string_view name) const noexcept;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
### function_type
|
### function_type
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
class function_type final : public type_base<function_type> {
|
||||||
|
public:
|
||||||
|
using type_base<function_type>::type_base;
|
||||||
|
function_bitflags get_flags() const noexcept;
|
||||||
|
|
||||||
|
std::size_t get_arity() const noexcept;
|
||||||
|
any_type get_return_type() const noexcept;
|
||||||
|
any_type get_argument_type(std::size_t position) const noexcept;
|
||||||
|
const any_type_list& get_argument_types() const noexcept;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
### member_type
|
### member_type
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
class member_type final : public type_base<member_type> {
|
||||||
|
public:
|
||||||
|
using type_base<member_type>::type_base;
|
||||||
|
member_bitflags get_flags() const noexcept;
|
||||||
|
|
||||||
|
class_type get_owner_type() const noexcept;
|
||||||
|
any_type get_value_type() const noexcept;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
### method_type
|
### method_type
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
class method_type final : public type_base<method_type> {
|
||||||
|
public:
|
||||||
|
using type_base<method_type>::type_base;
|
||||||
|
method_bitflags get_flags() const noexcept;
|
||||||
|
|
||||||
|
std::size_t get_arity() const noexcept;
|
||||||
|
class_type get_owner_type() const noexcept;
|
||||||
|
any_type get_return_type() const noexcept;
|
||||||
|
any_type get_argument_type(std::size_t position) const noexcept;
|
||||||
|
const any_type_list& get_argument_types() const noexcept;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
### nullptr_type
|
### nullptr_type
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
class nullptr_type final : public type_base<nullptr_type> {
|
||||||
|
public:
|
||||||
|
using type_base<nullptr_type>::type_base;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
### number_type
|
### number_type
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
class number_type final : public type_base<number_type> {
|
||||||
|
public:
|
||||||
|
using type_base<number_type>::type_base;
|
||||||
|
number_bitflags get_flags() const noexcept;
|
||||||
|
|
||||||
|
std::size_t get_size() const noexcept;
|
||||||
|
std::size_t get_align() const noexcept;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
### pointer_type
|
### pointer_type
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
class pointer_type final : public type_base<pointer_type> {
|
||||||
|
public:
|
||||||
|
using type_base<pointer_type>::type_base;
|
||||||
|
pointer_bitflags get_flags() const noexcept;
|
||||||
|
|
||||||
|
any_type get_data_type() const noexcept;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
### reference_type
|
### reference_type
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
class reference_type final : public type_base<reference_type> {
|
||||||
|
public:
|
||||||
|
using type_base<reference_type>::type_base;
|
||||||
|
reference_bitflags get_flags() const noexcept;
|
||||||
|
|
||||||
|
any_type get_data_type() const noexcept;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
### void_type
|
### void_type
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
class void_type final : public type_base<void_type> {
|
||||||
|
public:
|
||||||
|
using type_base<void_type>::type_base;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|||||||
Reference in New Issue
Block a user