feat(datatypes): basis for enums
This commit is contained in:
parent
5f6ff971d2
commit
f9fc8c8cae
2 changed files with 65 additions and 0 deletions
32
core/src/datatypes/enum.cpp
Normal file
32
core/src/datatypes/enum.cpp
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
#include "enum.h"
|
||||||
|
|
||||||
|
|
||||||
|
Enum::Enum(_EnumData* data) : data(data) {}
|
||||||
|
|
||||||
|
std::vector<EnumItem> Enum::GetEnumItems() {
|
||||||
|
std::vector<EnumItem> 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<EnumItem> 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<EnumItem> 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) {}
|
33
core/src/datatypes/enum.h
Normal file
33
core/src/datatypes/enum.h
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "base.h"
|
||||||
|
#include <optional>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
struct _EnumData {
|
||||||
|
std::pair<int, std::string>* values;
|
||||||
|
int count;
|
||||||
|
};
|
||||||
|
|
||||||
|
class EnumItem;
|
||||||
|
|
||||||
|
class Enum {
|
||||||
|
_EnumData* data;
|
||||||
|
public:
|
||||||
|
Enum(_EnumData*);
|
||||||
|
|
||||||
|
std::vector<EnumItem> GetEnumItems();
|
||||||
|
std::optional<EnumItem> FromName(std::string);
|
||||||
|
std::optional<EnumItem> 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); }
|
||||||
|
};
|
Loading…
Add table
Reference in a new issue