code / tomo

Lines41.3K C23.7K Markdown9.7K YAML5.0K Tomo2.3K
7 others 763
Python231 Shell230 make212 INI47 Text21 SVG16 Lua6
(43 lines)
1 // Optional types
3 #pragma once
5 #include <stdbool.h>
6 #include <stdint.h>
8 #include "datatypes.h"
9 #include "types.h"
10 #include "util.h"
12 #define NONE_LIST ((List_t){.data = NULL})
13 #define NONE_BOOL ((OptionalBool_t)2)
14 #define NONE_INT ((OptionalInt_t){.small = 0})
15 #define NONE_TABLE ((OptionalTable_t){.entries.data = NULL})
16 #define NONE_CLOSURE ((OptionalClosure_t){.fn = NULL})
17 #define NONE_TEXT ((OptionalText_t){.tag = TEXT_NONE})
18 #define NONE_PATH (Path_t) NULL
20 PUREFUNC bool is_none(const void *obj, const TypeInfo_t *non_optional_type);
21 PUREFUNC uint64_t Optional$hash(const void *obj, const TypeInfo_t *type);
22 PUREFUNC int32_t Optional$compare(const void *x, const void *y, const TypeInfo_t *type);
23 PUREFUNC bool Optional$equal(const void *x, const void *y, const TypeInfo_t *type);
24 Text_t Optional$as_text(const void *obj, bool colorize, const TypeInfo_t *type);
25 void Optional$serialize(const void *obj, FILE *out, Table_t *pointers, const TypeInfo_t *type);
26 void Optional$deserialize(FILE *in, void *outval, List_t *pointers, const TypeInfo_t *type);
28 #define Optional$metamethods \
29 { \
30 .hash = Optional$hash, \
31 .compare = Optional$compare, \
32 .equal = Optional$equal, \
33 .as_text = Optional$as_text, \
34 .serialize = Optional$serialize, \
35 .deserialize = Optional$deserialize, \
38 #define Optional$info(_size, _align, t) \
39 &((TypeInfo_t){.size = _size, \
40 .align = _align, \
41 .tag = OptionalInfo, \
42 .OptionalInfo.type = t, \
43 .metamethods = Optional$metamethods})