More data types and macro for wrapping primitives

This commit is contained in:
maelstrom 2024-11-22 18:49:45 +01:00
parent 29c85b58c7
commit 64e6ea4ed6
3 changed files with 28 additions and 26 deletions

View file

@ -3,8 +3,12 @@
#include <variant>
#include "datatypes/primitives.h"
typedef std::variant<StringData, IntData, FloatData> DataValue;
typedef std::variant<VoidData, BoolData, StringData, IntData, FloatData> DataValue;
const uint DAT_STRING = 0;
const uint DAT_INT = 1;
const uint DAT_FLOAT = 2;
enum class DataType {
VOID = 0,
BOOL = 1,
STRING = 2,
INT = 3,
FLOAT = 4
};

View file

@ -1,11 +1,11 @@
#include "primitives.h"
StringData::StringData(std::string str) : wrapped(str) {}
StringData::operator std::string() { return wrapped; }
#define IMPL_WRAPPER_CLASS(CLASS_NAME, WRAPPED_TYPE) CLASS_NAME::CLASS_NAME(WRAPPED_TYPE in) : wrapped(in) {}\
CLASS_NAME::operator WRAPPED_TYPE() { return wrapped; }
IntData::IntData(int in) : wrapped(in) {}
IntData::operator int() { return wrapped; }
FloatData::FloatData(float in) : wrapped(in) {}
FloatData::operator float() { return wrapped; }
VoidData::VoidData() {};
IMPL_WRAPPER_CLASS(BoolData, bool)
IMPL_WRAPPER_CLASS(IntData, int)
IMPL_WRAPPER_CLASS(FloatData, float)
IMPL_WRAPPER_CLASS(StringData, std::string)

View file

@ -2,23 +2,21 @@
#include <string>
class StringData {
std::string wrapped;
public:
StringData(std::string);
operator std::string();
#define DEF_WRAPPER_CLASS(CLASS_NAME, WRAPPED_TYPE) class CLASS_NAME {\
WRAPPED_TYPE wrapped;\
public:\
CLASS_NAME(WRAPPED_TYPE); \
operator WRAPPED_TYPE(); \
};
class IntData {
int wrapped;
class VoidData {
public:
IntData(int);
operator int();
VoidData();
};
class FloatData {
float wrapped;
public:
FloatData(float);
operator float();
};
DEF_WRAPPER_CLASS(BoolData, bool)
DEF_WRAPPER_CLASS(IntData, int)
DEF_WRAPPER_CLASS(FloatData, float)
DEF_WRAPPER_CLASS(StringData, std::string)
#undef DEF_WRAPPER_CLASS