Refureku v2.2.0
C++17 runtime reflection library.
rfk::FunctionBase Class Reference
Inheritance diagram for rfk::FunctionBase:
rfk::Entity rfk::Function rfk::MethodBase rfk::Method rfk::StaticMethod

Public Member Functions

template<typename ReturnType , typename... ArgTypes>
RFK_NODISCARD bool hasSameSignature () const noexcept
 Check whether 2 functions have the same signature. Non reflected types are compared equal, so NonReflectedType1 and NonReflectedType2 are considered equal since their archetype is the same. More...
 
RFK_NODISCARD REFUREKU_API bool hasSameSignature (FunctionBase const &other) const noexcept
 Check that another function has the same prototype as this function. Non reflected types are compared equal, so NonReflectedType1 and NonReflectedType2 are considered equal since their archetype is the same. More...
 
template<typename... ArgTypes>
RFK_NODISCARD bool hasSameParameters () const noexcept
 
RFK_NODISCARD REFUREKU_API Type const & getReturnType () const noexcept
 Get the return type of this function. More...
 
RFK_NODISCARD REFUREKU_API FunctionParameter const & getParameterAt (std::size_t index) const noexcept
 Retrieve the parameter at the given index. If index is greater or equal to the parameters count, the behaviour is undefined. More...
 
RFK_NODISCARD REFUREKU_API std::size_t getParametersCount () const noexcept
 Get the number of parameters of this function. More...
 
RFK_NODISCARD REFUREKU_API ICallablegetInternalFunction () const noexcept
 Get the internal function handled by this object. More...
 
REFUREKU_API FunctionParameteraddParameter (char const *name, std::size_t id, Type const &type) noexcept
 Add a parameter to the function. More...
 
REFUREKU_API void setParametersCapacity (std::size_t capacity) noexcept
 Set the number of parameters for this function. Useful to avoid reallocations when adding a lot of parameters. If the number of parameters is already >= to the provided count, this method has no effect. More...
 
- Public Member Functions inherited from rfk::Entity
 Entity (Entity const &)=delete
 
RFK_NODISCARD REFUREKU_API Property const * getPropertyAt (std::size_t propertyIndex) const noexcept
 Retrieve the property at the given index. If propertyIndex is greater or equal to the properties count, the behaviour is undefined. More...
 
template<typename PropertyType , typename = std::enable_if_t<std::is_base_of_v<Property, PropertyType> && !std::is_same_v<PropertyType, Property>>>
RFK_NODISCARD PropertyType const * getProperty (bool isChildClassValid=true) const noexcept
 Retrieve a property of a given type from this entity. More...
 
RFK_NODISCARD REFUREKU_API Property const * getProperty (Struct const &archetype, bool isChildClassValid=true) const noexcept
 Retrieve the first property matching with the provided archetype. More...
 
RFK_NODISCARD REFUREKU_API Property const * getPropertyByName (char const *name) const noexcept
 Retrieve the first property named with the provided name. More...
 
RFK_NODISCARD REFUREKU_API Property const * getPropertyByPredicate (Predicate< Property > predicate, void *userData) const
 Retrieve a property matching with a predicate. More...
 
template<typename PropertyType , typename = std::enable_if_t<std::is_base_of_v<Property, PropertyType> && !std::is_same_v<PropertyType, Property>>>
RFK_NODISCARD Vector< PropertyType const * > getProperties (bool isChildClassValid=true) const noexcept
 Retrieve all properties matching with the provided archetype. If PropertyType uses multiple inheritance, its first inherited type must be rfk::Property or derived. More...
 
RFK_NODISCARD REFUREKU_API Vector< Property const * > getProperties (Struct const &archetype, bool isChildClassValid=true) const noexcept
 Retrieve all properties matching with the provided archetype. More...
 
RFK_NODISCARD REFUREKU_API Vector< Property const * > getPropertiesByName (char const *name) const noexcept
 Retrieve all properties named with the provided name. More...
 
RFK_NODISCARD REFUREKU_API Vector< Property const * > getPropertiesByPredicate (Predicate< Property > predicate, void *userData) const
 Retrieve all properties matching with a predicate in this entity. More...
 
RFK_NODISCARD REFUREKU_API std::size_t getPropertiesCount () const noexcept
 Get the number of properties attached to this entity. More...
 
REFUREKU_API bool foreachProperty (Visitor< Property > visitor, void *userData) const
 Execute the given visitor on all properties attached to this entity. More...
 
RFK_NODISCARD REFUREKU_API char const * getName () const noexcept
 Get the name of the entity. More...
 
RFK_NODISCARD REFUREKU_API bool hasSameName (char const *name) const noexcept
 Check that this entity has the same name as the provided string. More...
 
RFK_NODISCARD REFUREKU_API std::size_t getId () const noexcept
 Get the program-unique id of the entity. More...
 
RFK_NODISCARD REFUREKU_API EEntityKind getKind () const noexcept
 Get the kind of the entity. Knowing the kind allows to safely cast to child classes. Check the EEntityKind documentation for more information. More...
 
RFK_NODISCARD REFUREKU_API Entity const * getOuterEntity () const noexcept
 Get the outer entity of the entity. It basically corresponds to the entity this entity was declared in from a source-code point of view. A nullptr outer entity means the entity was declared at file level. More...
 
REFUREKU_API bool addProperty (Property const &property) noexcept
 Add a property to this entity. More...
 
REFUREKU_API void setOuterEntity (Entity const *outerEntity) noexcept
 Setter for the field _outerEntity. More...
 
REFUREKU_API void setPropertiesCapacity (std::size_t capacity) noexcept
 Set the number of properties for this entity. Useful to avoid reallocations when adding a lot of properties. If the number of properties is already >= to the provided capacity, this method has no effect. More...
 
Entityoperator= (Entity const &)=delete
 
Entityoperator= (Entity &&)=delete
 
RFK_NODISCARD REFUREKU_API bool operator== (Entity const &other) const noexcept
 
RFK_NODISCARD REFUREKU_API bool operator!= (Entity const &other) const noexcept
 

Protected Member Functions

REFUREKU_INTERNAL FunctionBase (FunctionBaseImpl *implementation) noexcept
 
REFUREKU_INTERNAL FunctionBase (FunctionBase &&) noexcept
 
 RFK_GEN_GET_PIMPL (FunctionBaseImpl, Entity::getPimpl())
 
template<typename... ArgTypes>
void checkParametersCount () const
 Check that the provided argument count is the same as this function's. More...
 
template<typename... ArgTypes>
void checkParameterTypes () const
 Check that the provided types are the same as this function parameter types. More...
 
template<typename ReturnType >
void checkReturnType () const
 Check that the provided type is the same as this function return type. More...
 
- Protected Member Functions inherited from rfk::Entity
REFUREKU_INTERNAL Entity (Entity &&) noexcept
 
REFUREKU_INTERNAL Entity (EntityImpl *implementation) noexcept
 

Member Function Documentation

◆ addParameter()

REFUREKU_API FunctionParameter & rfk::FunctionBase::addParameter ( char const *  name,
std::size_t  id,
Type const &  type 
)
noexcept

Add a parameter to the function.

Parameters
nameName of the parameter, can be empty.
idId of the parameter entity.
typeType of the parameter.
Returns
The added function parameter.

◆ checkParametersCount()

template<typename... ArgTypes>
void rfk::FunctionBase::checkParametersCount ( ) const
protected

Check that the provided argument count is the same as this function's.

Exceptions
ArgCountMismatchif the argument count is different from this function arg count.

◆ checkParameterTypes()

template<typename... ArgTypes>
void rfk::FunctionBase::checkParameterTypes ( ) const
protected

Check that the provided types are the same as this function parameter types.

Exceptions
ArgCountMismatchif the argument count is different from this function arg count.
ArgTypeMismatchif one the argument has a different type from the expected one.

◆ checkReturnType()

template<typename ReturnType >
void rfk::FunctionBase::checkReturnType ( ) const
protected

Check that the provided type is the same as this function return type.

Exceptions
ReturnTypeMismatchif the provided return type is different from this function's return type.

◆ getInternalFunction()

RFK_NODISCARD REFUREKU_API ICallable * rfk::FunctionBase::getInternalFunction ( ) const
noexcept

Get the internal function handled by this object.

Returns
The function handle.

◆ getParameterAt()

RFK_NODISCARD REFUREKU_API FunctionParameter const & rfk::FunctionBase::getParameterAt ( std::size_t  index) const
noexcept

Retrieve the parameter at the given index. If index is greater or equal to the parameters count, the behaviour is undefined.

Parameters
indexIndex of the parameter.
Returns
The parameter at the given index.

◆ getParametersCount()

RFK_NODISCARD REFUREKU_API std::size_t rfk::FunctionBase::getParametersCount ( ) const
noexcept

Get the number of parameters of this function.

Returns
The number of parameters of this function.

◆ getReturnType()

RFK_NODISCARD REFUREKU_API Type const & rfk::FunctionBase::getReturnType ( ) const
noexcept

Get the return type of this function.

Returns
The return type of this function.

◆ hasSameParameters()

template<typename... ArgTypes>
RFK_NODISCARD bool rfk::FunctionBase::hasSameParameters ( ) const
noexcept
Template Parameters

.. ArgTypes Argument types to compare with.

Returns
true if this function has the same parameter types as ArgTypes, else false.

◆ hasSameSignature() [1/2]

template<typename ReturnType , typename... ArgTypes>
RFK_NODISCARD bool rfk::FunctionBase::hasSameSignature ( ) const
noexcept

Check whether 2 functions have the same signature. Non reflected types are compared equal, so NonReflectedType1 and NonReflectedType2 are considered equal since their archetype is the same.

Template Parameters
ReturnTypeReturn type to compare with.

.. ArgTypes Argument types to compare with.

Returns
true if this function has the same return type as ReturnType and the same parameter types as ArgTypes, else false.

◆ hasSameSignature() [2/2]

RFK_NODISCARD REFUREKU_API bool rfk::FunctionBase::hasSameSignature ( FunctionBase const &  other) const
noexcept

Check that another function has the same prototype as this function. Non reflected types are compared equal, so NonReflectedType1 and NonReflectedType2 are considered equal since their archetype is the same.

Parameters
otherFunction to compare the prototype with.
Returns
true if the provided function has the same prototype as this function, else false.

◆ setParametersCapacity()

REFUREKU_API void rfk::FunctionBase::setParametersCapacity ( std::size_t  capacity)
noexcept

Set the number of parameters for this function. Useful to avoid reallocations when adding a lot of parameters. If the number of parameters is already >= to the provided count, this method has no effect.

Parameters
paramCapacityThe number of parameters of this function.

The documentation for this class was generated from the following file: