A 3d fps game made in OpenGL
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
Symmetry/src/variant.h

61 lines
1.5 KiB

#ifndef VARIANT_H
#define VARIANT_H
#include "linmath.h"
#define MAX_VARIANT_STR_LEN 1024
enum Variant_Type
{
VT_NONE = 0,
VT_BOOL,
VT_INT,
VT_FLOAT,
VT_DOUBLE,
VT_STR,
VT_VEC2,
VT_VEC3,
VT_VEC4,
VT_QUAT,
VT_MAT4,
VT_VOID_PTR,
VT_NUM_TYPES
};
struct Variant
{
int type;
union
{
int val_int;
int val_bool;
float val_float;
double val_double;
char* val_str;
vec2 val_vec2;
vec3 val_vec3;
vec4 val_vec4;
quat val_quat;
mat4* val_mat4;
void* val_voidptr;
};
};
void variant_init_empty(struct Variant* variant);
void variant_assign_float(struct Variant* variant, float value);
void variant_assign_int(struct Variant* variant, int value);
void variant_assign_double(struct Variant* variant, double value);
void variant_assign_bool(struct Variant* variant, int value);
void variant_assign_str(struct Variant* variant, const char* value);
void variant_assign_vec2(struct Variant* variant, const vec2* value);
void variant_assign_vec3(struct Variant* variant, const vec3* value);
void variant_assign_vec4(struct Variant* variant, const vec4* value);
void variant_assign_quat(struct Variant* variant, const quat* value);
void variant_assign_mat4(struct Variant* variant, const mat4* source);
void variant_assign_ptr(struct Variant* variant, void* source);
void variant_copy(struct Variant* to, const struct Variant* from);
void variant_free(struct Variant* variant);
void variant_to_str(const struct Variant* variant, char* str, int len);
void variant_from_str(struct Variant* variant, const char* str, int variant_type);
#endif