|
CeresEngine 0.2.0
A game development framework
|
A value type that can hold any alongside it's type information. More...
#include <CeresEngine/Reflection/Box.hpp>
Classes | |
| class | Array |
| class | Iterable |
| class | Iterator |
| class | Map |
| class | Pointer |
| union | Storage |
| A type that contains storage for the Box. More... | |
| struct | TypeCastOperation |
Implementation for type casting in Box. More... | |
| struct | TypeCheckOperation |
Implementation for type checks in Box. More... | |
| struct | TypeConversionOperation |
Implementation for type conversion in Box. More... | |
Public Member Functions | |
| Box () noexcept | |
| Creates a new variant holding an empty value. | |
| Box (const Box &other) | |
| Creates a new variant by copying another, if possible. | |
| Box & | operator= (const Box &other) |
| Assigns a variant a new value by copying another, if possible. | |
| Box (Box &&other) noexcept | |
| Creates a new variant by moving another, if possible. | |
| Box & | operator= (Box &&other) noexcept |
| Assigns a variant a new value by moving another, if possible. | |
| template<typename T > requires (!std::is_same_v<std::decay_t<T>, Box>) | |
| Box (T &&value) | |
| Creates a new variant from a C++ value. | |
| template<typename T > requires (!std::is_same_v<std::decay_t<T>, Box>) | |
| Box & | operator= (T &&value) |
| Assigns the variant a new value a C++ value. | |
| template<typename T > requires (!std::is_same_v<T, Box>) | |
| Box (std::reference_wrapper< T > value) | |
| Creates a new variant from a C++ value. | |
| template<typename T , typename... Args> requires (!std::is_same_v<T, Box>) | |
| Box (std::in_place_type_t< T >, Args &&... args) | |
| Box (const void *ptr, const TypeInfo *typeInfo) | |
| ~Box () noexcept | |
| Destroys the variant. Will call the contained object destructor. | |
| bool | isSmall () const noexcept |
| Determines if the value fits on the small buffer storage. | |
| void | clear () noexcept |
| Clears the variant and makes it empty. | |
| bool | empty () const noexcept |
| Checks if the variant is empty (i.e. holds no value). | |
| operator bool () const noexcept | |
| Checks if the variant is not empty (i.e. holds a value). | |
| template<typename T > | |
| bool | eq (const T &value) const |
| Checks if a variant holds the same value as another. | |
| template<typename T > | |
| bool | neq (const T &value) const |
| Checks if a variant holds the same value as another. | |
| TypeID | getTypeID () const noexcept |
| Gets the ID of the type held by the variant. | |
| Type | getType () const noexcept |
| Gets the type held by the variant. | |
| Type | getClassType () const noexcept |
| Gets the type held by the variant. | |
| const Class * | getClass () const noexcept |
| const Enum * | getMetaEnum () const noexcept |
| template<typename T > | |
| bool | is () const |
Checks if the value held by the variant is T. | |
| bool | is (const Type &type) const |
| Box | copy () const |
| Makes a copy of the object. | |
| Box | ref () const & |
| Gets a reference to the meta value. | |
| Box | cref () const & |
| Gets a reference to the meta value. | |
| Box | rref () && |
| Gets a reference to the meta value. | |
| Box | ref () && |
| Gets a reference to the meta value. | |
| template<typename T > | |
| T & | ref () const & |
Gets the value of the variant as a reference to T. | |
| template<> | |
| Box & | ref () const & |
| template<typename T > | |
| T && | ref () && |
Gets the value of the variant as a reference to T. | |
| template<> | |
| Box && | ref () && |
| template<typename T > | |
| const T & | cref () const |
Gets the value of the variant as a const reference to T. | |
| template<> | |
| const Box & | cref () const |
| template<typename T > | |
| T && | rref () && |
Gets the value of the variant as a r-value reference to T. | |
| template<> | |
| Box && | rref () && |
| void * | data () noexcept |
| Returns pointer to decayed type. | |
| const void * | data () const noexcept |
| Returns pointer to decayed type. | |
| template<typename T > | |
| T * | data () const |
Gets the value of the variant as a pointer to const T. | |
| template<typename T > | |
| bool | canConvert () const |
Checks if the value held by the variant is convertible to T. | |
| bool | canConvert (const TypeID &target) const |
Checks if the value held by the variant is convertible to T. | |
| bool | canConvert (const Type &target) const |
Checks if the value held by the variant is convertible to T. | |
| bool | canConvert (const TypeInfo &target) const |
Checks if the value held by the variant is convertible to T. | |
| template<typename T > | |
| T | to () const & |
Gets the value of the variant as a T. | |
| template<> | |
| Box | to () const & |
| Box | to (const TypeID &target) const |
Gets the value of the variant as a T. | |
| Box | to (const Type &target) const |
Gets the value of the variant as a T. | |
| Box | to (const TypeInfo &target) const |
Gets the value of the variant as a T. | |
| template<typename T > | |
| void | convert () |
Converts the variant to type T. | |
| template<typename T > | |
| bool | tryConvert () |
Tries to convert the variant to type T. | |
| Iterable | asIterable () const & |
Views the Box as an Iterable type. | |
| Iterable | asIterable () && |
| Iterator | asIterator () const & |
Views the Box as an Iterator type. | |
| Iterator | asIterator () && |
| Array | asArray () const & |
Views the Box as an Array type. | |
| Array | asArray () && |
| Map | asMap () const & |
Views the Box as an Map type. | |
| Map | asMap () && |
| Pointer | asPointer () const & |
Views the Box as an Pointer type. | |
| Pointer | asPointer () && |
Static Public Member Functions | |
| template<typename T , typename... Args> | |
| static Box | create (Args &&... args) |
Private Member Functions | |
| void * | cast () |
| void * | storage () noexcept |
| Returns pointer to decayed type. | |
| const void * | storage () const noexcept |
| Returns pointer to decayed type. | |
| void * | allocate (const TypeInfo *typeInfo) |
| void | destroy () |
| void | swap (Box &other) noexcept |
| Swaps the values of two variants. | |
| TypeID | getInternalTypeID (TypeAttribute attr=TypeAttribute::NONE) const noexcept |
| Gets the type ID for the given type attribute. | |
| ClassInfo | getClassInfo () const noexcept |
Gets the ClassInfo of the stored value. | |
Private Attributes | |
| Storage | mStorage |
| The value storage. | |
| const TypeInfo * | mTypeInfo = nullptr |
| The stored value type. | |
Static Private Attributes | |
| static constexpr const size_t | kSmallSize = sizeof(void*) * 2 |
Friends | |
| class | Type |
| class | MetaArgument |
| bool | operator== (const Box &lhs, const Box &rhs) |
| Checks if a variant holds the same value as another. | |
| bool | operator!= (const Box &lhs, const Box &rhs) |
| Checks if a variant holds the same value as another. | |
| void | swap (Box &, Box &) noexcept |
A value type that can hold any alongside it's type information.
|
noexcept |
Creates a new variant holding an empty value.
|
noexcept |
Creates a new variant by moving another, if possible.
| CeresEngine::Box::Box | ( | T && | value | ) |
Creates a new variant from a C++ value.
| CeresEngine::Box::Box | ( | std::reference_wrapper< T > | value | ) |
Creates a new variant from a C++ value.
|
explicit |
|
noexcept |
Destroys the variant. Will call the contained object destructor.
| Array CeresEngine::Box::asArray | ( | ) | && |
| Iterable CeresEngine::Box::asIterable | ( | ) | && |
| Iterator CeresEngine::Box::asIterator | ( | ) | && |
| Map CeresEngine::Box::asMap | ( | ) | && |
| Pointer CeresEngine::Box::asPointer | ( | ) | && |
Checks if the value held by the variant is convertible to T.
| T | The check conversion. |
Checks if the value held by the variant is convertible to T.
| T | The check conversion. |
Checks if the value held by the variant is convertible to T.
| T | The check conversion. |
Checks if the value held by the variant is convertible to T.
| T | The check conversion. |
|
private |
|
noexcept |
Clears the variant and makes it empty.
Converts the variant to type T.
The variant will have it's value reassigned to the coverted value.
| T | The type to convert to. |
| Box CeresEngine::Box::copy | ( | ) | const |
Makes a copy of the object.
Unlike the copy constructor, this method returns a copy even if the meta value points to a reference.
Gets the value of the variant as a const reference to T.
| T | The type to get the value as. |
| Box CeresEngine::Box::cref | ( | ) | const & |
Gets a reference to the meta value.
If the value is already a reference, a copy of the reference is returned.
Gets the value of the variant as a pointer to const T.
If the type doesn't match, nullptr is returned.
| T | The type to get the value as. |
|
inlinenoexcept |
Returns pointer to decayed type.
|
private |
|
noexcept |
Checks if the variant is empty (i.e. holds no value).
Checks if a variant holds the same value as another.
|
privatenoexcept |
Gets the ClassInfo of the stored value.
|
noexcept |
Gets the type held by the variant.
|
privatenoexcept |
Gets the type ID for the given type attribute.
|
noexcept |
Gets the type held by the variant.
|
inlinenoexcept |
Gets the ID of the type held by the variant.
Checks if the value held by the variant is T.
|
noexcept |
Determines if the value fits on the small buffer storage.
Checks if a variant holds the same value as another.
|
inlineexplicitnoexcept |
Checks if the variant is not empty (i.e. holds a value).
Assigns a variant a new value by moving another, if possible.
Assigns a variant a new value by copying another, if possible.
|
inline |
Gets a reference to the meta value.
If the value is already a reference, a copy of the reference is returned.
Gets the value of the variant as a reference to T.
| T | The type to get the value as. |
|
inline |
| Box CeresEngine::Box::ref | ( | ) | const & |
Gets a reference to the meta value.
If the value is already a reference, a copy of the reference is returned.
Gets the value of the variant as a reference to T.
| T | The type to get the value as. |
|
inline |
| Box CeresEngine::Box::rref | ( | ) | && |
Gets a reference to the meta value.
If the value is already a reference, a copy of the reference is returned.
Gets the value of the variant as a r-value reference to T.
| T | The type to get the value as. |
|
inline |
Returns pointer to decayed type.
|
inlineprivatenoexcept |
Returns pointer to decayed type.
Swaps the values of two variants.
| other | The other variant to swap the value with. |
Gets the value of the variant as a T.
Will perform a conversion if one is available and needed.
| T | The type to get the value as. |
|
inline |
Gets the value of the variant as a T.
Will perform a conversion if one is available and needed.
| T | The type to get the value as. |
Gets the value of the variant as a T.
Will perform a conversion if one is available and needed.
| T | The type to get the value as. |
Gets the value of the variant as a T.
Will perform a conversion if one is available and needed.
| T | The type to get the value as. |
Tries to convert the variant to type T.
The variant will have it's value reassigned to the coverted value.
true if the conversion was sucesfull, false otherwise. | T | The type to convert to. |
|
friend |
Checks if a variant holds the same value as another.
Checks if a variant holds the same value as another.
|
private |
The value storage.