blob: f0a57758c562214ef1b5337879682764292564f1 [file] [log] [blame]
Damien660365e2013-12-17 18:27:24 +00001typedef enum {
Damiend99b0522013-12-21 18:17:45 +00002 MP_MAP_QSTR,
3 MP_MAP_OBJ,
4} mp_map_kind_t;
Damien660365e2013-12-17 18:27:24 +00005
Damiend99b0522013-12-21 18:17:45 +00006typedef struct _mp_map_elem_t {
7 mp_obj_t key;
8 mp_obj_t value;
9} mp_map_elem_t;
Damien660365e2013-12-17 18:27:24 +000010
Damiend99b0522013-12-21 18:17:45 +000011typedef struct _mp_map_t {
Damien660365e2013-12-17 18:27:24 +000012 struct {
Damiend99b0522013-12-21 18:17:45 +000013 mp_map_kind_t kind : 1;
Damien660365e2013-12-17 18:27:24 +000014 machine_uint_t used : (8 * BYTES_PER_WORD - 1);
15 };
16 machine_uint_t alloc;
Damiend99b0522013-12-21 18:17:45 +000017 mp_map_elem_t *table;
18} mp_map_t;
19
20typedef struct _mp_set_t {
21 machine_uint_t alloc;
22 machine_uint_t used;
23 mp_obj_t *table;
24} mp_set_t;
Damien660365e2013-12-17 18:27:24 +000025
Damien660365e2013-12-17 18:27:24 +000026int get_doubling_prime_greater_or_equal_to(int x);
Damiend99b0522013-12-21 18:17:45 +000027void mp_map_init(mp_map_t *map, mp_map_kind_t kind, int n);
28mp_map_t *mp_map_new(mp_map_kind_t kind, int n);
John R. Lenton0fcbaa42014-01-06 19:48:34 +000029mp_map_elem_t* mp_map_lookup_helper(mp_map_t *map, mp_obj_t index, bool add_if_not_found, bool remove_if_found);
Damiend99b0522013-12-21 18:17:45 +000030mp_map_elem_t* mp_qstr_map_lookup(mp_map_t *map, qstr index, bool add_if_not_found);
John R. Lenton4ce6cea2014-01-06 17:38:47 +000031void mp_map_clear(mp_map_t *map);
Damiend99b0522013-12-21 18:17:45 +000032
33void mp_set_init(mp_set_t *set, int n);
34mp_obj_t mp_set_lookup(mp_set_t *set, mp_obj_t index, bool add_if_not_found);