diff --git a/core/src/datatypes/enum.cpp b/core/src/datatypes/enum.cpp new file mode 100644 index 0000000..6819657 --- /dev/null +++ b/core/src/datatypes/enum.cpp @@ -0,0 +1,32 @@ +#include "enum.h" + + +Enum::Enum(_EnumData* data) : data(data) {} + +std::vector Enum::GetEnumItems() { + std::vector enumItems; + + for (int i = 0; i < data->count; i++) { + enumItems.push_back(EnumItem(data, data->values[i].second, data->values[i].first)); + } + + return enumItems; +} + +std::optional Enum::FromName(std::string name) { + for (int i = 0; i < data->count; i++) { + if (data->values[i].second == name) + return EnumItem(data, name, data->values[i].first); + } + return {}; +} + +std::optional Enum::FromValue(int value) { + for (int i = 0; i < data->count; i++) { + if (data->values[i].first == value) + return EnumItem(data, data->values[i].second, value); + } + return {}; +} + +EnumItem::EnumItem(_EnumData* parentData, std::string name, int value) : parentData(parentData), name(name), value(value) {} \ No newline at end of file diff --git a/core/src/datatypes/enum.h b/core/src/datatypes/enum.h new file mode 100644 index 0000000..dd8f421 --- /dev/null +++ b/core/src/datatypes/enum.h @@ -0,0 +1,33 @@ +#pragma once + +#include "base.h" +#include +#include + +struct _EnumData { + std::pair* values; + int count; +}; + +class EnumItem; + +class Enum { + _EnumData* data; +public: + Enum(_EnumData*); + + std::vector GetEnumItems(); + std::optional FromName(std::string); + std::optional FromValue(int); +}; + +class EnumItem { + _EnumData* parentData; + std::string name; + int value; +public: + EnumItem(_EnumData*, std::string, int); + inline std::string Name() { return this->name; } + inline int Value() { return this->value; } + inline Enum EnumType() { return Enum(this->parentData); } +}; \ No newline at end of file