yuezonghe | 824eb0c | 2024-06-27 02:32:26 -0700 | [diff] [blame^] | 1 | #ifndef __VECTOR_H__ |
| 2 | #define __VECTOR_H__ |
| 3 | |
| 4 | #include <stdlib.h> |
| 5 | #include <string.h> |
| 6 | #include <stdio.h> |
| 7 | #include <errno.h> |
| 8 | #include <assert.h> |
| 9 | |
| 10 | #define VECTOR_DEFAULT_CAPACITY (100) |
| 11 | |
| 12 | typedef enum |
| 13 | { |
| 14 | TYPE_UNDEFINED, |
| 15 | IS_LONG, |
| 16 | IS_FLOAT, |
| 17 | IS_STRING |
| 18 | } Type; |
| 19 | |
| 20 | typedef struct var |
| 21 | { |
| 22 | Type type; |
| 23 | union |
| 24 | { |
| 25 | long lval; |
| 26 | float fval; |
| 27 | struct |
| 28 | { |
| 29 | size_t len; |
| 30 | char* sval; |
| 31 | } str; |
| 32 | } val; |
| 33 | }Var; |
| 34 | |
| 35 | typedef struct vector |
| 36 | { |
| 37 | size_t size; |
| 38 | size_t capacity; |
| 39 | Var** data; |
| 40 | } vector_t; |
| 41 | |
| 42 | Var* var_long(long value); |
| 43 | Var* var_float(float value); |
| 44 | Var* var_string(char* value); |
| 45 | void var_print(Var* var); |
| 46 | void var_destroy(Var* var); |
| 47 | const char* const var_type_of_token(Type t); |
| 48 | |
| 49 | vector_t* vector_init(); |
| 50 | void vector_push_back(vector_t*, Var*); |
| 51 | size_t vector_size(vector_t*); |
| 52 | Var* vector_get(vector_t*, size_t); |
| 53 | void vector_free(vector_t*); |
| 54 | |
| 55 | #endif /* __VECTOR_H__ */ |