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.c

98 lines
2.2 KiB

#include "variant.h"
#include "log.h"
#include <stdlib.h>
void variant_init_empty(struct Variant* variant)
{
variant->type = VT_NONE;
variant->val_voidptr = NULL;
}
void variant_assign_mat4(struct Variant* variant, const mat4* source)
{
if(variant->type != VT_MAT4) variant_free(variant);
if(!variant->val_voidptr)
{
variant->val_voidptr = malloc(sizeof(mat4));
if(!variant->val_voidptr)
{
log_error("variant_init_mat4", "Out of memory");
return;
}
}
mat4_assign(variant->val_voidptr, source);
}
void variant_assign_float(struct Variant* variant, float value)
{
if(variant->type != VT_FLOAT) variant_free(variant);
variant->type = VT_FLOAT;
variant->val_float = value;
}
void variant_assign_int(struct Variant* variant, int value)
{
if(variant->type != VT_INT) variant_free(variant);
variant->type = VT_INT;
variant->val_int = value;
}
void variant_assign_double(struct Variant* variant, double value)
{
if(variant->type != VT_DOUBLE) variant_free(variant);
variant->type = VT_DOUBLE;
variant->val_double = value;
}
void variant_assign_vec2(struct Variant* variant, vec2* value)
{
if(variant->type != VT_VEC2) variant_free(variant);
variant->type = VT_VEC2;
vec2_assign(&variant->val_vec2, value);
}
void variant_assign_vec3(struct Variant* variant, vec3* value)
{
if(variant->type != VT_VEC3) variant_free(variant);
variant->type = VT_VEC3;
vec3_assign(&variant->val_vec3, value);
}
void variant_assign_vec4(struct Variant* variant, vec4* value)
{
if(variant->type != VT_VEC4) variant_free(variant);
variant->type = VT_VEC4;
vec4_assign(&variant->val_vec4, value);
}
void variant_assign_quat(struct Variant* variant, quat* value)
{
if(variant->type != VT_QUAT) variant_free(variant);
variant->type = VT_QUAT;
quat_assign(&variant->val_quat, value);
}
void variant_free_mat4(struct Variant* variant)
{
if(variant->type == VT_MAT4)
{
if(variant->val_voidptr)
{
free(variant->val_voidptr);
variant->val_voidptr = NULL;
}
}
else
{
log_error("variant:free_mat4", "Cannot free, variant is not of MAT4 type");
}
}
void variant_free(struct Variant* variant)
{
if(variant->type == VT_MAT4)
variant_free_mat4(variant);
}