diff --git a/core/src/variant.h b/core/src/variant.h new file mode 100644 index 0000000..3e5c1ca --- /dev/null +++ b/core/src/variant.h @@ -0,0 +1,37 @@ +#ifndef _fencer_variant_h +#define _fencer_variant_h + +#include "vmath.h" +#include "mirror.h" + +typedef enum VariantType { + Variant_Undefined = 0x0, + Variant_Float = 0x1, + Variant_Int = 0x2, + Variant_Unsigned = 0x3, + Variant_Vector = 0x4, + Variant_Object = 0x5, + Variant_String = 0x6, +} VariantType; + +typedef struct Variant { + VariantType type; + union { + float as_float; + long as_int; + unsigned as_unsigned; + Vector as_vector; + Mirror as_object; + char* as_string; + }; +} Variant; + +#define FloatVariant(Value_) (Variant){.type = Variant_Float, .as_float = Value_} +#define IntVariant(Value_) (Variant){.type = Variant_Int, .as_int = Value_} +#define UnsignedVariant(Value_) (Variant){.type = Variant_Unsigned, .as_unsigned = Value_} +#define VectorVariant(Value_) (Variant){.type = Variant_Vector, .as_vector = Value_} +#define ObjectVariant(Value_) (Variant){.type = Variant_Object, .as_object = Value_} +#define StringVariant(Value_) (Variant){.type = Variant_String, .as_string = Value_} +#define UndefinedVariant() (Variant){.type = Variant_Undefined } + +#endif // !_fencer_variant_h