Refureku v2.2.0
C++17 runtime reflection library.
Enum.h
1
8#pragma once
9
10#include "Refureku/TypeInfo/Archetypes/Archetype.h"
11
12namespace rfk
13{
14 //Forward declaration
15 class EnumValue;
16
17 class Enum final : public Archetype
18 {
19 public:
20 REFUREKU_API Enum(char const* name,
21 std::size_t id,
22 Archetype const* underlyingArchetype,
23 Entity const* outerEntity = nullptr) noexcept;
24 REFUREKU_API ~Enum() noexcept;
25
33 RFK_NODISCARD REFUREKU_API
34 EnumValue const* getEnumValueByName(char const* name) const noexcept;
35
43 RFK_NODISCARD REFUREKU_API
44 EnumValue const* getEnumValue(int64 value) const noexcept;
45
56 RFK_NODISCARD REFUREKU_API
58 void* userData) const;
59
67 RFK_NODISCARD REFUREKU_API
68 Vector<EnumValue const*> getEnumValues(int64 value) const noexcept;
69
80 RFK_NODISCARD REFUREKU_API
82 void* userData) const;
83
92 RFK_NODISCARD REFUREKU_API
93 EnumValue const& getEnumValueAt(std::size_t valueIndex) const noexcept;
94
100 RFK_NODISCARD REFUREKU_API
101 std::size_t getEnumValuesCount() const noexcept;
102
108 RFK_NODISCARD REFUREKU_API
109 Archetype const& getUnderlyingArchetype() const noexcept;
110
122 REFUREKU_API
124 void* userData) const;
125
136 REFUREKU_API
137 EnumValue* addEnumValue(char const* name,
138 std::size_t id,
139 int64 value) noexcept;
140
148 REFUREKU_API
149 void setEnumValuesCapacity(std::size_t capacity) noexcept;
150
151 protected:
152 //Forward declaration
153 class EnumImpl;
154
155 RFK_GEN_GET_PIMPL(EnumImpl, Entity::getPimpl())
156 };
157
159 template <typename T>
160 Enum const* getEnum() noexcept;
161
162 REFUREKU_TEMPLATE_API(rfk::Allocator<Enum const*>);
163 REFUREKU_TEMPLATE_API(rfk::Vector<Enum const*, rfk::Allocator<Enum const*>>);
164
165 #include "Refureku/TypeInfo/Archetypes/Enum.inl"
166}
Definition: Allocator.h:19
Definition: Archetype.h:16
Definition: Entity.h:29
Definition: Enum.h:18
REFUREKU_API EnumValue * addEnumValue(char const *name, std::size_t id, int64 value) noexcept
Add an enum value to this enum.
RFK_NODISCARD REFUREKU_API EnumValue const * getEnumValueByName(char const *name) const noexcept
Search an enum value by name in this enum.
RFK_NODISCARD REFUREKU_API EnumValue const * getEnumValue(int64 value) const noexcept
Search an enum value by value in this enum.
RFK_NODISCARD REFUREKU_API Archetype const & getUnderlyingArchetype() const noexcept
Get the type this enum is based on.
RFK_NODISCARD REFUREKU_API std::size_t getEnumValuesCount() const noexcept
Get the number of enum values contained in this enum.
RFK_NODISCARD REFUREKU_API Vector< EnumValue const * > getEnumValues(int64 value) const noexcept
Search all enum values in this enum holding the provided value.
RFK_NODISCARD REFUREKU_API Vector< EnumValue const * > getEnumValuesByPredicate(Predicate< EnumValue > predicate, void *userData) const
Retrieve from this enum all enum values matching with a given predicate.
RFK_NODISCARD REFUREKU_API EnumValue const * getEnumValueByPredicate(Predicate< EnumValue > predicate, void *userData) const
Retrieve from this enum the first enum value matching with a given predicate.
REFUREKU_API void setEnumValuesCapacity(std::size_t capacity) noexcept
Set the number of enum values for this entity. Useful to avoid reallocations when adding a lot of enu...
REFUREKU_API bool foreachEnumValue(Visitor< EnumValue > visitor, void *userData) const
Execute the given visitor on all enum values in this enum.
RFK_NODISCARD REFUREKU_API EnumValue const & getEnumValueAt(std::size_t valueIndex) const noexcept
Get the enum value located at the provided index in the enum. If valueIndex is greater or equal to th...
Definition: EnumValue.h:19
Definition: Vector.h:19
Definition: Allocator.h:16
bool(*)(T const &value, void *userData) Predicate
Predicate defining if a value is valid or not.
Definition: Predicate.h:21
Enum const * getEnum() noexcept
bool(*)(T const &value, void *userData) Visitor
Visitor function.
Definition: Visitor.h:21