diff options
Diffstat (limited to 'py/map.h')
-rw-r--r-- | py/map.h | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/py/map.h b/py/map.h new file mode 100644 index 000000000..6c9df9ece --- /dev/null +++ b/py/map.h @@ -0,0 +1,30 @@ +typedef enum { + MAP_QSTR, + MAP_PY_OBJ, +} py_map_kind_t; + +typedef struct _py_map_elem_t { + py_obj_t key; + py_obj_t value; +} py_map_elem_t; + +typedef struct _py_map_t { + struct { + py_map_kind_t kind : 1; + machine_uint_t used : (8 * BYTES_PER_WORD - 1); + }; + machine_uint_t alloc; + py_map_elem_t *table; +} py_map_t; + +// these are defined in runtime.c +py_map_t *rt_get_map_locals(void); +void rt_set_map_locals(py_map_t *m); + +int get_doubling_prime_greater_or_equal_to(int x); +void py_map_init(py_map_t *map, py_map_kind_t kind, int n); +py_map_t *py_map_new(py_map_kind_t kind, int n); +py_map_elem_t* py_map_lookup_helper(py_map_t *map, py_obj_t index, bool add_if_not_found); +py_map_elem_t* py_qstr_map_lookup(py_map_t *map, qstr index, bool add_if_not_found); +py_map_elem_t* py_map_lookup(py_obj_t o, py_obj_t index, bool add_if_not_found); +py_obj_t py_set_lookup(py_obj_t o_in, py_obj_t index, bool add_if_not_found); |