From 64e6ea4ed651ee2dd435bb40c0bd40c82853c769 Mon Sep 17 00:00:00 2001 From: maelstrom Date: Fri, 22 Nov 2024 18:49:45 +0100 Subject: [PATCH] More data types and macro for wrapping primitives --- src/datatype.h | 12 ++++++++---- src/datatypes/primitives.cpp | 14 +++++++------- src/datatypes/primitives.h | 28 +++++++++++++--------------- 3 files changed, 28 insertions(+), 26 deletions(-) diff --git a/src/datatype.h b/src/datatype.h index d568c91..bc77cf2 100644 --- a/src/datatype.h +++ b/src/datatype.h @@ -3,8 +3,12 @@ #include #include "datatypes/primitives.h" -typedef std::variant DataValue; +typedef std::variant DataValue; -const uint DAT_STRING = 0; -const uint DAT_INT = 1; -const uint DAT_FLOAT = 2; \ No newline at end of file +enum class DataType { + VOID = 0, + BOOL = 1, + STRING = 2, + INT = 3, + FLOAT = 4 +}; \ No newline at end of file diff --git a/src/datatypes/primitives.cpp b/src/datatypes/primitives.cpp index 2170d4a..042798d 100644 --- a/src/datatypes/primitives.cpp +++ b/src/datatypes/primitives.cpp @@ -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) \ No newline at end of file diff --git a/src/datatypes/primitives.h b/src/datatypes/primitives.h index 169d5e6..00b0028 100644 --- a/src/datatypes/primitives.h +++ b/src/datatypes/primitives.h @@ -2,23 +2,21 @@ #include -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(); -}; \ No newline at end of file +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 \ No newline at end of file