blob: ce5505571c78d2f6b3d91b33bf2b4f7376908dc3 [file] [log] [blame]
Damiend99b0522013-12-21 18:17:45 +00001typedef struct _mp_map_elem_t {
2 mp_obj_t key;
3 mp_obj_t value;
4} mp_map_elem_t;
Damien660365e2013-12-17 18:27:24 +00005
Damiend99b0522013-12-21 18:17:45 +00006typedef struct _mp_map_t {
Damien660365e2013-12-17 18:27:24 +00007 struct {
Damien George38a2da62014-01-08 17:33:12 +00008 machine_uint_t all_keys_are_qstrs : 1;
Damien George9a58d762014-02-08 18:47:46 +00009 machine_uint_t table_is_fixed_array : 1;
10 machine_uint_t used : (8 * sizeof(machine_uint_t) - 2);
Damien660365e2013-12-17 18:27:24 +000011 };
12 machine_uint_t alloc;
Damiend99b0522013-12-21 18:17:45 +000013 mp_map_elem_t *table;
14} mp_map_t;
15
16typedef struct _mp_set_t {
17 machine_uint_t alloc;
18 machine_uint_t used;
19 mp_obj_t *table;
20} mp_set_t;
Damien660365e2013-12-17 18:27:24 +000021
Damien George062478e2014-01-09 20:57:50 +000022typedef enum _mp_map_lookup_kind_t {
John R. Lentonae00d332014-01-12 18:23:36 +000023 MP_MAP_LOOKUP, // 0
24 MP_MAP_LOOKUP_ADD_IF_NOT_FOUND, // 1
25 MP_MAP_LOOKUP_REMOVE_IF_FOUND, // 2
26 MP_MAP_LOOKUP_FIRST = 4,
Damien George38a2da62014-01-08 17:33:12 +000027} mp_map_lookup_kind_t;
28
Damien660365e2013-12-17 18:27:24 +000029int get_doubling_prime_greater_or_equal_to(int x);
Damien George38a2da62014-01-08 17:33:12 +000030void mp_map_init(mp_map_t *map, int n);
Damien George9a58d762014-02-08 18:47:46 +000031void mp_map_init_fixed_table(mp_map_t *map, int n, const mp_obj_t *table);
Damien George38a2da62014-01-08 17:33:12 +000032mp_map_t *mp_map_new(int n);
Paul Sokolovsky9a24a042014-01-25 00:02:20 +020033void mp_map_deinit(mp_map_t *map);
34void mp_map_free(mp_map_t *map);
Damien George38a2da62014-01-08 17:33:12 +000035mp_map_elem_t* mp_map_lookup(mp_map_t *map, mp_obj_t index, mp_map_lookup_kind_t lookup_kind);
John R. Lenton4ce6cea2014-01-06 17:38:47 +000036void mp_map_clear(mp_map_t *map);
Damiend99b0522013-12-21 18:17:45 +000037
38void mp_set_init(mp_set_t *set, int n);
John R. Lenton2a241722014-01-12 16:39:39 +000039mp_obj_t mp_set_lookup(mp_set_t *set, mp_obj_t index, mp_map_lookup_kind_t lookup_kind);
John R. Lenton1d7fb2f2014-01-12 15:44:26 +000040void mp_set_clear(mp_set_t *set);