10#include "Refureku/Config.h"
11#include "Refureku/Misc/Pimpl.h"
12#include "Refureku/Misc/Visitor.h"
13#include "Refureku/Misc/Predicate.h"
14#include "Refureku/Containers/Vector.h"
15#include "Refureku/TypeInfo/Variables/EVarFlags.h"
16#include "Refureku/TypeInfo/Functions/EFunctionFlags.h"
17#include "Refureku/TypeInfo/Functions/FunctionHelper.h"
40 class DefaultEntityRegistererImpl;
41 class ArchetypeRegistererImpl;
42 class NamespaceFragmentRegistererImpl;
43 class ClassTemplateInstantiationRegistererImpl;
49 REFUREKU_INTERNAL
Database()
noexcept;
61 RFK_NODISCARD REFUREKU_API
71 RFK_NODISCARD REFUREKU_API
85 RFK_NODISCARD REFUREKU_API
98 RFK_NODISCARD REFUREKU_API
100 void* userData)
const;
112 RFK_NODISCARD REFUREKU_API
114 void* userData)
const;
128 void* userData)
const;
144 RFK_NODISCARD REFUREKU_API
156 RFK_NODISCARD REFUREKU_API
169 RFK_NODISCARD REFUREKU_API
171 void* userData) const;
180 RFK_NODISCARD REFUREKU_API
190 RFK_NODISCARD REFUREKU_API
203 RFK_NODISCARD REFUREKU_API
205 void* userData) const;
217 RFK_NODISCARD REFUREKU_API
219 void* userData) const;
233 void* userData) const;
249 RFK_NODISCARD REFUREKU_API
259 RFK_NODISCARD REFUREKU_API
272 RFK_NODISCARD REFUREKU_API
274 void* userData) const;
286 RFK_NODISCARD REFUREKU_API
288 void* userData) const;
302 void* userData) const;
318 RFK_NODISCARD REFUREKU_API
328 RFK_NODISCARD REFUREKU_API
341 RFK_NODISCARD REFUREKU_API
343 void* userData) const;
355 RFK_NODISCARD REFUREKU_API
357 void* userData) const;
371 void* userData) const;
387 RFK_NODISCARD REFUREKU_API
397 RFK_NODISCARD REFUREKU_API
407 RFK_NODISCARD REFUREKU_API
419 RFK_NODISCARD REFUREKU_API
433 RFK_NODISCARD REFUREKU_API
435 void* userData) const;
447 RFK_NODISCARD REFUREKU_API
449 void* userData) const;
463 void* userData) const;
479 RFK_NODISCARD REFUREKU_API
491 template <typename FunctionSignature>
504 RFK_NODISCARD REFUREKU_API
517 RFK_NODISCARD REFUREKU_API
531 RFK_NODISCARD REFUREKU_API
533 void* userData) const;
545 RFK_NODISCARD REFUREKU_API
547 void* userData) const;
561 void* userData) const;
577 RFK_NODISCARD REFUREKU_API
587 RFK_NODISCARD REFUREKU_API
597 RFK_NODISCARD REFUREKU_API
607 RFK_NODISCARD REFUREKU_API
617 RFK_NODISCARD REFUREKU_API
625 Pimpl<DatabaseImpl> _pimpl;
633 REFUREKU_API static
Database& getInstance() noexcept;
635 friend internal::DefaultEntityRegistererImpl;
636 friend internal::ArchetypeRegistererImpl;
637 friend internal::NamespaceFragmentRegistererImpl;
639 friend internal::ClassTemplateInstantiationRegistererImpl;
650 #include "Refureku/TypeInfo/Database.inl"
Definition: Archetype.h:16
Definition: Database.h:47
RFK_NODISCARD REFUREKU_API Method const * getMethodById(std::size_t id) const noexcept
Retrieve a method by id.
REFUREKU_API bool foreachFileLevelVariable(Visitor< Variable > visitor, void *userData) const
Execute the given visitor on all file level variables.
RFK_NODISCARD REFUREKU_API Variable const * getVariableById(std::size_t id) const noexcept
Retrieve a variable by id.
RFK_NODISCARD REFUREKU_API Function const * getFileLevelFunctionByPredicate(Predicate< Function > predicate, void *userData) const
Retrieve the first file level function satisfying the provided predicate.
RFK_NODISCARD REFUREKU_API Namespace const * getNamespaceById(std::size_t id) const noexcept
Retrieve a namespace by id.
RFK_NODISCARD REFUREKU_API StaticField const * getStaticFieldById(std::size_t id) const noexcept
Retrieve a static field by id.
RFK_NODISCARD REFUREKU_API Namespace const * getFileLevelNamespaceByPredicate(Predicate< Namespace > predicate, void *userData) const
Retrieve the first file level namespace satisfying the provided predicate.
RFK_NODISCARD REFUREKU_API Vector< Archetype const * > getFileLevelArchetypesByPredicate(Predicate< Archetype > predicate, void *userData) const
Retrieve all file level archetypes satisfying the provided predicate.
REFUREKU_API bool foreachFileLevelStruct(Visitor< Struct > visitor, void *userData) const
Execute the given visitor on all file level structs.
REFUREKU_API bool foreachFileLevelEnum(Visitor< Enum > visitor, void *userData) const
Execute the given visitor on all file level enums.
RFK_NODISCARD REFUREKU_API Archetype const * getArchetypeById(std::size_t id) const noexcept
Retrieve an archetype by id.
REFUREKU_API std::size_t getFileLevelClassesCount() const noexcept
Get the number of reflected file level classes in the database.
REFUREKU_API bool foreachFileLevelNamespace(Visitor< Namespace > visitor, void *userData) const
Execute the given visitor on all file level namespaces.
RFK_NODISCARD REFUREKU_API Vector< Function const * > getFileLevelFunctionsByPredicate(Predicate< Function > predicate, void *userData) const
Retrieve all file level functions satisfying the provided predicate.
REFUREKU_API std::size_t getFileLevelStructsCount() const noexcept
Get the number of reflected file level structs in the database.
RFK_NODISCARD REFUREKU_API Enum const * getFileLevelEnumByPredicate(Predicate< Enum > predicate, void *userData) const
Retrieve the first file level enum satisfying the provided predicate.
RFK_NODISCARD REFUREKU_API Entity const * getEntityById(std::size_t id) const noexcept
Retrieve an entity by id.
RFK_NODISCARD REFUREKU_API Archetype const * getFileLevelArchetypeByName(char const *name) const noexcept
Retrieve a file level archetype by name. This method costs heavier performance as it will basically c...
RFK_NODISCARD REFUREKU_API Struct const * getFileLevelStructByName(char const *name) const noexcept
Retrieve a file level struct by name.
RFK_NODISCARD REFUREKU_API Vector< Function const * > getFileLevelFunctionsByName(char const *name, EFunctionFlags flags=EFunctionFlags::Default) const noexcept
Retrieve all file level functions by name.
RFK_NODISCARD REFUREKU_API Vector< Variable const * > getFileLevelVariablesByPredicate(Predicate< Variable > predicate, void *userData) const
Retrieve all file level variables satisfying the provided predicate.
RFK_NODISCARD REFUREKU_API FundamentalArchetype const * getFundamentalArchetypeByName(char const *name) const noexcept
Retrieve a fundamental archetype by name.
RFK_NODISCARD REFUREKU_API Function const * getFunctionById(std::size_t id) const noexcept
Retrieve a function by id.
RFK_NODISCARD REFUREKU_API Class const * getFileLevelClassByName(char const *name) const noexcept
Retrieve a file level class by name.
REFUREKU_API bool foreachFileLevelFunction(Visitor< Function > visitor, void *userData) const
Execute the given visitor on all file level functions.
REFUREKU_API std::size_t getFileLevelEnumsCount() const noexcept
Get the number of reflected file level classes in the database.
friend REFUREKU_API Database const & getDatabase() noexcept
Get a reference to the database of this program.
RFK_NODISCARD REFUREKU_API Namespace const * getNamespaceByName(char const *name) const
Retrieve a namespace by name. Can search nested namespaces directly using :: separator....
RFK_NODISCARD REFUREKU_API Field const * getFieldById(std::size_t id) const noexcept
Retrieve a field by id.
RFK_NODISCARD REFUREKU_API Vector< Namespace const * > getFileLevelNamespacesByPredicate(Predicate< Namespace > predicate, void *userData) const
Retrieve all file level namespaces satisfying the provided predicate.
RFK_NODISCARD REFUREKU_API Vector< Enum const * > getFileLevelEnumsByPredicate(Predicate< Enum > predicate, void *userData) const
Retrieve all file level enums satisfying the provided predicate.
RFK_NODISCARD REFUREKU_API Struct const * getFileLevelStructByPredicate(Predicate< Struct > predicate, void *userData) const
Retrieve the first level struct satisfying the provided predicate.
RFK_NODISCARD REFUREKU_API Vector< Struct const * > getFileLevelStructsByPredicate(Predicate< Struct > predicate, void *userData) const
Retrieve all file level structs satisfying the provided predicate.
RFK_NODISCARD REFUREKU_API EnumValue const * getEnumValueById(std::size_t id) const noexcept
Retrieve an enum value by id.
REFUREKU_API std::size_t getFileLevelFunctionsCount() const noexcept
Get the number of reflected file level functions in the database.
RFK_NODISCARD Function const * getFileLevelFunctionByName(char const *name, EFunctionFlags flags=EFunctionFlags::Default) const noexcept
Retrieve a file level function by name and signature.
RFK_NODISCARD REFUREKU_API StaticMethod const * getStaticMethodById(std::size_t id) const noexcept
Retrieve a static method by id.
RFK_NODISCARD REFUREKU_API Struct const * getStructById(std::size_t id) const noexcept
Retrieve a struct by id.
RFK_NODISCARD REFUREKU_API Variable const * getFileLevelVariableByPredicate(Predicate< Variable > predicate, void *userData) const
Retrieve the first file level variable satisfying the provided predicate.
RFK_NODISCARD REFUREKU_API Variable const * getFileLevelVariableByName(char const *name, EVarFlags flags=EVarFlags::Default) const noexcept
Retrieve a file level (non-member) variable by name.
REFUREKU_API bool foreachFileLevelClass(Visitor< Class > visitor, void *userData) const
Execute the given visitor on all file level classes.
REFUREKU_API std::size_t getFileLevelVariablesCount() const noexcept
Get the number of reflected file level variables in the database.
RFK_NODISCARD REFUREKU_API FundamentalArchetype const * getFundamentalArchetypeById(std::size_t id) const noexcept
Retrieve a fundamental archetype by id.
RFK_NODISCARD REFUREKU_API Class const * getFileLevelClassByPredicate(Predicate< Class > predicate, void *userData) const
Retrieve the first level struct satisfying the provided predicate.
RFK_NODISCARD REFUREKU_API Class const * getClassById(std::size_t id) const noexcept
Retrieve a class by id.
RFK_NODISCARD REFUREKU_API Vector< Class const * > getFileLevelClassesByPredicate(Predicate< Class > predicate, void *userData) const
Retrieve all file level classes satisfying the provided predicate.
RFK_NODISCARD REFUREKU_API Enum const * getEnumById(std::size_t id) const noexcept
Retrieve an enum by id.
REFUREKU_API std::size_t getFileLevelNamespacesCount() const noexcept
Get the number of reflected file level namespaces in the database.
RFK_NODISCARD REFUREKU_API Enum const * getFileLevelEnumByName(char const *name) const noexcept
Retrieve a file level enum by name.
Definition: EnumValue.h:19
Definition: Function.h:17
Definition: FundamentalArchetype.h:15
Definition: NamespaceFragment.h:18
Definition: Namespace.h:26
Definition: StaticField.h:19
Definition: StaticMethod.h:16
Definition: Variable.h:16
Definition: Allocator.h:16
bool(*)(T const &value, void *userData) Predicate
Predicate defining if a value is valid or not.
Definition: Predicate.h:21
EFunctionFlags
Definition: EFunctionFlags.h:17
bool(*)(T const &value, void *userData) Visitor
Visitor function.
Definition: Visitor.h:21
EVarFlags
Definition: EVarFlags.h:16