Skip to content

Commit 80e1681

Browse files
committed
py/map: Add board option MICROPY_PY_MAP_ORDERED to make all dicts/maps ordered.
1 parent 7104260 commit 80e1681

File tree

1 file changed

+11
-0
lines changed

1 file changed

+11
-0
lines changed

py/map.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,15 +87,19 @@ void mp_map_init(mp_map_t *map, size_t n) {
8787
map->used = 0;
8888
map->all_keys_are_qstrs = 1;
8989
map->is_fixed = 0;
90+
#if !MICROPY_PY_MAP_ORDERED
9091
map->is_ordered = 0;
92+
#endif
9193
}
9294

9395
void mp_map_init_fixed_table(mp_map_t *map, size_t n, const mp_obj_t *table) {
9496
map->alloc = n;
9597
map->used = n;
9698
map->all_keys_are_qstrs = 1;
9799
map->is_fixed = 1;
100+
#if !MICROPY_PY_MAP_ORDERED
98101
map->is_ordered = 1;
102+
#endif
99103
map->table = (mp_map_elem_t *)table;
100104
}
101105

@@ -118,6 +122,7 @@ void mp_map_clear(mp_map_t *map) {
118122
map->table = NULL;
119123
}
120124

125+
#if !MICROPY_PY_MAP_ORDERED
121126
STATIC void mp_map_rehash(mp_map_t *map) {
122127
size_t old_alloc = map->alloc;
123128
size_t new_alloc = get_hash_alloc_greater_or_equal_to(map->alloc + 1);
@@ -136,6 +141,7 @@ STATIC void mp_map_rehash(mp_map_t *map) {
136141
}
137142
m_del(mp_map_elem_t, old_table, old_alloc);
138143
}
144+
#endif
139145

140146
// MP_MAP_LOOKUP behaviour:
141147
// - returns NULL if not found, else the slot it was found in with key,value non-null
@@ -167,7 +173,9 @@ mp_map_elem_t *mp_map_lookup(mp_map_t *map, mp_obj_t index, mp_map_lookup_kind_t
167173
}
168174

169175
// if the map is an ordered array then we must do a brute force linear search
176+
#if !MICROPY_PY_MAP_ORDERED
170177
if (map->is_ordered) {
178+
#endif
171179
for (mp_map_elem_t *elem = &map->table[0], *top = &map->table[map->used]; elem < top; elem++) {
172180
if (elem->key == index || (!compare_only_ptrs && mp_obj_equal(elem->key, index))) {
173181
#if MICROPY_PY_COLLECTIONS_ORDEREDDICT
@@ -205,6 +213,8 @@ mp_map_elem_t *mp_map_lookup(mp_map_t *map, mp_obj_t index, mp_map_lookup_kind_t
205213
#else
206214
return NULL;
207215
#endif
216+
217+
#if !MICROPY_PY_MAP_ORDERED
208218
}
209219

210220
// map is a hash table (not an ordered array), so do a hash lookup
@@ -294,6 +304,7 @@ mp_map_elem_t *mp_map_lookup(mp_map_t *map, mp_obj_t index, mp_map_lookup_kind_t
294304
}
295305
}
296306
}
307+
#endif // !MICROPY_PY_MAP_ORDERED
297308
}
298309

299310
/******************************************************************************/

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy