map.h 1.54 KB
Newer Older
1
2
3
4
typedef struct _mp_map_elem_t {
    mp_obj_t key;
    mp_obj_t value;
} mp_map_elem_t;
5

6
7
8
9
10
// TODO maybe have a truncated mp_map_t for fixed tables, since alloc=used
// put alloc last in the structure, so the truncated version does not need it
// this would save 1 ROM word for all ROM objects that have a locals_dict
// would also need a trucated dict structure

11
typedef struct _mp_map_t {
12
13
14
    machine_uint_t all_keys_are_qstrs : 1;
    machine_uint_t table_is_fixed_array : 1;
    machine_uint_t used : (8 * sizeof(machine_uint_t) - 2);
15
    machine_uint_t alloc;
16
17
18
19
20
21
22
23
    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;
24

25
typedef enum _mp_map_lookup_kind_t {
John R. Lenton's avatar
John R. Lenton committed
26
27
28
29
    MP_MAP_LOOKUP,                    // 0
    MP_MAP_LOOKUP_ADD_IF_NOT_FOUND,   // 1
    MP_MAP_LOOKUP_REMOVE_IF_FOUND,    // 2
    MP_MAP_LOOKUP_FIRST = 4,
30
31
} mp_map_lookup_kind_t;

32
33
34
35
36
typedef struct _mp_obj_dict_t {
    mp_obj_base_t base;
    mp_map_t map;
} mp_obj_dict_t;

37
int get_doubling_prime_greater_or_equal_to(int x);
38
void mp_map_init(mp_map_t *map, int n);
39
void mp_map_init_fixed_table(mp_map_t *map, int n, const mp_obj_t *table);
40
mp_map_t *mp_map_new(int n);
41
42
void mp_map_deinit(mp_map_t *map);
void mp_map_free(mp_map_t *map);
43
mp_map_elem_t* mp_map_lookup(mp_map_t *map, mp_obj_t index, mp_map_lookup_kind_t lookup_kind);
John R. Lenton's avatar
John R. Lenton committed
44
void mp_map_clear(mp_map_t *map);
45
46

void mp_set_init(mp_set_t *set, int n);
John R. Lenton's avatar
John R. Lenton committed
47
mp_obj_t mp_set_lookup(mp_set_t *set, mp_obj_t index, mp_map_lookup_kind_t lookup_kind);
John R. Lenton's avatar
John R. Lenton committed
48
void mp_set_clear(mp_set_t *set);