void mp_map_init(mp_map_t *map, int n) { if (n == 0) { map->alloc = 0; map->table = NULL; } else { map->alloc = get_doubling_prime_greater_or_equal_to(n + 1); map->table = m_new0(mp_map_elem_t, map->alloc); } map->used = 0; map->all_keys_are_qstrs = 1; map->table_is_fixed_array = 0; }
STATIC void mp_set_rehash(mp_set_t *set) { int old_alloc = set->alloc; mp_obj_t *old_table = set->table; set->alloc = get_doubling_prime_greater_or_equal_to(set->alloc + 1); set->used = 0; set->table = m_new0(mp_obj_t, set->alloc); for (int i = 0; i < old_alloc; i++) { if (old_table[i] != NULL) { mp_set_lookup(set, old_table[i], true); } } m_del(mp_obj_t, old_table, old_alloc); }
STATIC void mp_set_rehash(mp_set_t *set) { mp_uint_t old_alloc = set->alloc; mp_obj_t *old_table = set->table; set->alloc = get_doubling_prime_greater_or_equal_to(set->alloc + 1); set->used = 0; set->table = m_new0(mp_obj_t, set->alloc); for (mp_uint_t i = 0; i < old_alloc; i++) { if (old_table[i] != MP_OBJ_NULL && old_table[i] != MP_OBJ_SENTINEL) { mp_set_lookup(set, old_table[i], MP_MAP_LOOKUP_ADD_IF_NOT_FOUND); } } m_del(mp_obj_t, old_table, old_alloc); }
STATIC void mp_map_rehash(mp_map_t *map) { int old_alloc = map->alloc; mp_map_elem_t *old_table = map->table; map->alloc = get_doubling_prime_greater_or_equal_to(map->alloc + 1); map->used = 0; map->all_keys_are_qstrs = 1; map->table = m_new0(mp_map_elem_t, map->alloc); for (int i = 0; i < old_alloc; i++) { if (old_table[i].key != NULL) { mp_map_lookup(map, old_table[i].key, MP_MAP_LOOKUP_ADD_IF_NOT_FOUND)->value = old_table[i].value; } } m_del(mp_map_elem_t, old_table, old_alloc); }
void mp_set_init(mp_set_t *set, int n) { set->alloc = get_doubling_prime_greater_or_equal_to(n + 1); set->used = 0; set->table = m_new0(mp_obj_t, set->alloc); }