mirror of
https://github.com/krgamestudios/Toy.git
synced 2026-04-15 14:54:07 +10:00
Wrote value, chunk, memory sections, tested value
chunk and memory remain untested for now
This commit is contained in:
55
source/toy_value.h
Normal file
55
source/toy_value.h
Normal file
@@ -0,0 +1,55 @@
|
||||
#pragma once
|
||||
|
||||
#include "toy_common.h"
|
||||
|
||||
typedef enum Toy_ValueType {
|
||||
TOY_VALUE_NULL,
|
||||
TOY_VALUE_BOOLEAN,
|
||||
TOY_VALUE_INTEGER,
|
||||
TOY_VALUE_FLOAT,
|
||||
TOY_VALUE_STRING,
|
||||
TOY_VALUE_ARRAY,
|
||||
TOY_VALUE_DICTIONARY,
|
||||
TOY_VALUE_FUNCTION,
|
||||
TOY_VALUE_OPAQUE,
|
||||
} Toy_ValueType;
|
||||
|
||||
typedef struct Toy_Value {
|
||||
union {
|
||||
bool boolean; //1
|
||||
int integer; //4
|
||||
float number; //4
|
||||
//TODO: strings
|
||||
//TODO: arrays
|
||||
//TODO: dictonaries
|
||||
//TODO: functions
|
||||
//TODO: opaque
|
||||
} as; //4
|
||||
|
||||
Toy_ValueType type; //4 bytes
|
||||
} Toy_Value;
|
||||
|
||||
#define TOY_VALUE_IS_NULL(value) ((value).type == TOY_VALUE_NULL)
|
||||
#define TOY_VALUE_IS_BOOLEAN(value) ((value).type == TOY_VALUE_BOOLEAN)
|
||||
#define TOY_VALUE_IS_INTEGER(value) ((value).type == TOY_VALUE_INTEGER)
|
||||
#define TOY_VALUE_IS_FLOAT(value) ((value).type == TOY_VALUE_FLOAT)
|
||||
#define TOY_VALUE_IS_STRING(value) ((value).type == TOY_VALUE_STRING)
|
||||
#define TOY_VALUE_IS_ARRAY(value) ((value).type == TOY_VALUE_ARRAY)
|
||||
#define TOY_VALUE_IS_DICTIONARY(value) ((value).type == TOY_VALUE_DICTIONARY)
|
||||
#define TOY_VALUE_IS_FUNCTION(value) ((value).type == TOY_VALUE_FUNCTION)
|
||||
#define TOY_VALUE_IS_OPAQUE(value) ((value).type == TOY_VALUE_OPAQUE)
|
||||
|
||||
#define TOY_VALUE_AS_BOOLEAN(value) ((value).as.boolean)
|
||||
#define TOY_VALUE_AS_INTEGER(value) ((value).as.integer)
|
||||
#define TOY_VALUE_AS_FLOAT(value) ((value).as.number)
|
||||
//TODO: more
|
||||
|
||||
#define TOY_VALUE_TO_NULL() ((Toy_Value){{ .integer = 0 }, TOY_VALUE_NULL})
|
||||
#define TOY_VALUE_TO_BOOLEAN(value) ((Toy_Value){{ .boolean = value }, TOY_VALUE_BOOLEAN})
|
||||
#define TOY_VALUE_TO_INTEGER(value) ((Toy_Value){{ .integer = value }, TOY_VALUE_INTEGER})
|
||||
#define TOY_VALUE_TO_FLOAT(value) ((Toy_Value){{ .number = value }, TOY_VALUE_FLOAT})
|
||||
//TODO: more
|
||||
|
||||
#define TOY_VALUE_IS_TRUTHY(value) Toy_private_isTruthy(value)
|
||||
TOY_API bool Toy_private_isTruthy(Toy_Value value);
|
||||
|
||||
Reference in New Issue
Block a user