28#ifndef ASRT_FLAT_TREE_H
29#define ASRT_FLAT_TREE_H
35#include "./allocator.h"
42typedef uint32_t asrt_flat_id;
47 ASRT_FLAT_STYPE_NONE = 0,
48 ASRT_FLAT_STYPE_STR = 1,
49 ASRT_FLAT_STYPE_U32 = 2,
50 ASRT_FLAT_STYPE_FLOAT = 3,
51 ASRT_FLAT_STYPE_BOOL = 4,
52 ASRT_FLAT_STYPE_NULL = 5,
53 ASRT_FLAT_STYPE_I32 = 6,
59 ASRT_FLAT_CTYPE_NONE = 0,
60 ASRT_FLAT_CTYPE_OBJECT = 7,
61 ASRT_FLAT_CTYPE_ARRAY = 8,
66typedef uint8_t asrt_flat_value_type;
70 asrt_flat_id first_child;
71 asrt_flat_id last_child;
91 asrt_flat_value_type type;
109enum asrt_status asrt_flat_block_init(
112 uint32_t node_capacity );
114enum asrt_status asrt_flat_block_deinit(
117 uint32_t node_capacity );
125 uint32_t block_capacity;
130enum asrt_status asrt_flat_tree_init(
133 uint32_t block_capacity,
134 uint32_t node_capacity );
139enum asrt_status asrt_flat_tree_append_scalar(
141 asrt_flat_id parent_id,
142 asrt_flat_id node_id,
144 asrt_flat_value_type type,
148enum asrt_status asrt_flat_tree_append_cont(
150 asrt_flat_id parent_id,
151 asrt_flat_id node_id,
153 asrt_flat_value_type type );
164enum asrt_status asrt_flat_tree_query(
166 asrt_flat_id node_id,
170enum asrt_status asrt_flat_tree_find_by_key(
172 asrt_flat_id parent_id,
176enum asrt_status asrt_flat_tree_deinit(
struct asrt_flat_tree* tree );
188enum asrt_status asrt_flat_value_decode(
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee ...
Definition: allocator.h:28
Contiguous array of nodes. Lazily allocated per block.
Definition: flat_tree.h:104
Definition: flat_tree.h:69
Definition: flat_tree.h:96
char const * key
Owned copy. Non-NULL for OBJECT children, NULL for ARRAY children.
Definition: flat_tree.h:98
asrt_flat_id next_sibling
0 = no next sibling.
Definition: flat_tree.h:99
Definition: flat_tree.h:156
asrt_flat_id next_sibling
0 = no next sibling.
Definition: flat_tree.h:160
node_id maps to blocks[node_id / node_capacity][node_id % node_capacity].
Definition: flat_tree.h:121
uint32_t node_capacity
Nodes per block, fixed at init.
Definition: flat_tree.h:127
Definition: flat_tree.h:90
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee ...
Definition: span.h:23
Definition: flat_tree.h:84
Definition: flat_tree.h:75