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.
47 lines
1.1 KiB
47 lines
1.1 KiB
#include <stdbool.h> |
|
#include <stddef.h> |
|
|
|
typedef struct SnekObject snek_object_t; |
|
|
|
typedef enum SnekObjectKind { |
|
INTEGER, |
|
FLOAT, |
|
STRING, |
|
VECTOR3, |
|
ARRAY, |
|
} snek_object_kind_t; |
|
|
|
typedef struct SnekVector { |
|
snek_object_t *x; |
|
snek_object_t *y; |
|
snek_object_t *z; |
|
} snek_vector_t; |
|
|
|
typedef struct SnekArray { |
|
size_t size; |
|
snek_object_t **elements; |
|
} snek_array_t; |
|
|
|
typedef union SnekObjectData { |
|
int v_int; |
|
float v_float; |
|
char* v_string; |
|
snek_vector_t v_vector3; |
|
snek_array_t v_array; |
|
} snek_object_data_t; |
|
|
|
typedef struct SnekObject { |
|
snek_object_kind_t kind; |
|
snek_object_data_t data; |
|
size_t refcount; |
|
} snek_object_t; |
|
|
|
snek_object_t *new_snek_integer(int value); |
|
snek_object_t *new_snek_float(float value); |
|
snek_object_t *new_snek_string(char *value); |
|
snek_object_t *new_snek_vector3(snek_object_t *x, snek_object_t *y, snek_object_t *z); |
|
|
|
snek_object_t *new_snek_array(size_t size); |
|
bool snek_array_set(snek_object_t *snek_obj, size_t index, snek_object_t *value); |
|
snek_object_t *snek_array_get(snek_object_t *snek_obj, size_t index); |
|
int snek_length(snek_object_t *obj);
|
|
|