fix gu_map_next

This commit is contained in:
krangelov
2019-08-30 13:31:19 +02:00
parent 1e8d684f9a
commit 59a6e3cfdd
2 changed files with 13 additions and 9 deletions

View File

@@ -322,21 +322,25 @@ gu_map_iter(GuMap* map, GuMapItor* itor, GuExn* err)
}
GU_API bool
gu_map_next(GuMap* map, size_t i, const void** pkey, void** pvalue)
gu_map_next(GuMap* map, size_t* pi, void** pkey, void* pvalue)
{
while (i < map->data.n_entries) {
if (gu_map_entry_is_free(map, &map->data, i)) {
i++;
while (*pi < map->data.n_entries) {
if (gu_map_entry_is_free(map, &map->data, *pi)) {
(*pi)++;
continue;
}
*pkey = &map->data.keys[i * map->key_size];
*pvalue = &map->data.values[i * map->cell_size];
*pkey = &map->data.keys[*pi * map->key_size];
if (map->hasher == gu_addr_hasher) {
*pkey = *(const void* const*) *pkey;
*pkey = *(void**) *pkey;
} else if (map->hasher == gu_string_hasher) {
*pkey = *(GuString*) *pkey;
*pkey = *(void**) *pkey;
}
memcpy(pvalue, &map->data.values[*pi * map->cell_size],
map->value_size);
(*pi)++;
return true;
}

View File

@@ -75,7 +75,7 @@ GU_API_DECL void
gu_map_iter(GuMap* ht, GuMapItor* itor, GuExn* err);
GU_API bool
gu_map_next(GuMap* ht, size_t i, const void** pkey, void** pvalue);
gu_map_next(GuMap* map, size_t* pi, void** pkey, void* pvalue);
typedef GuMap GuIntMap;