2013-12-17 13:27:24 -05:00
|
|
|
typedef enum {
|
2013-12-21 13:17:45 -05:00
|
|
|
MP_MAP_QSTR,
|
|
|
|
MP_MAP_OBJ,
|
|
|
|
} mp_map_kind_t;
|
2013-12-17 13:27:24 -05:00
|
|
|
|
2013-12-21 13:17:45 -05:00
|
|
|
typedef struct _mp_map_elem_t {
|
|
|
|
mp_obj_t key;
|
|
|
|
mp_obj_t value;
|
|
|
|
} mp_map_elem_t;
|
2013-12-17 13:27:24 -05:00
|
|
|
|
2013-12-21 13:17:45 -05:00
|
|
|
typedef struct _mp_map_t {
|
2013-12-17 13:27:24 -05:00
|
|
|
struct {
|
2013-12-21 13:17:45 -05:00
|
|
|
mp_map_kind_t kind : 1;
|
2013-12-17 13:27:24 -05:00
|
|
|
machine_uint_t used : (8 * BYTES_PER_WORD - 1);
|
|
|
|
};
|
|
|
|
machine_uint_t alloc;
|
2013-12-21 13:17:45 -05:00
|
|
|
mp_map_elem_t *table;
|
|
|
|
} mp_map_t;
|
|
|
|
|
|
|
|
typedef struct _mp_set_t {
|
|
|
|
machine_uint_t alloc;
|
|
|
|
machine_uint_t used;
|
|
|
|
mp_obj_t *table;
|
|
|
|
} mp_set_t;
|
2013-12-17 13:27:24 -05:00
|
|
|
|
|
|
|
int get_doubling_prime_greater_or_equal_to(int x);
|
2013-12-21 13:17:45 -05:00
|
|
|
void mp_map_init(mp_map_t *map, mp_map_kind_t kind, int n);
|
|
|
|
mp_map_t *mp_map_new(mp_map_kind_t kind, int n);
|
2014-01-06 14:48:34 -05:00
|
|
|
mp_map_elem_t* mp_map_lookup_helper(mp_map_t *map, mp_obj_t index, bool add_if_not_found, bool remove_if_found);
|
2013-12-21 13:17:45 -05:00
|
|
|
mp_map_elem_t* mp_qstr_map_lookup(mp_map_t *map, qstr index, bool add_if_not_found);
|
2014-01-06 12:38:47 -05:00
|
|
|
void mp_map_clear(mp_map_t *map);
|
2013-12-21 13:17:45 -05:00
|
|
|
|
|
|
|
void mp_set_init(mp_set_t *set, int n);
|
|
|
|
mp_obj_t mp_set_lookup(mp_set_t *set, mp_obj_t index, bool add_if_not_found);
|