mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-05-20 00:22:51 -06:00
fix gu_map_next
This commit is contained in:
@@ -322,21 +322,25 @@ gu_map_iter(GuMap* map, GuMapItor* itor, GuExn* err)
|
|||||||
}
|
}
|
||||||
|
|
||||||
GU_API bool
|
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) {
|
while (*pi < map->data.n_entries) {
|
||||||
if (gu_map_entry_is_free(map, &map->data, i)) {
|
if (gu_map_entry_is_free(map, &map->data, *pi)) {
|
||||||
i++;
|
(*pi)++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
*pkey = &map->data.keys[i * map->key_size];
|
*pkey = &map->data.keys[*pi * map->key_size];
|
||||||
*pvalue = &map->data.values[i * map->cell_size];
|
|
||||||
if (map->hasher == gu_addr_hasher) {
|
if (map->hasher == gu_addr_hasher) {
|
||||||
*pkey = *(const void* const*) *pkey;
|
*pkey = *(void**) *pkey;
|
||||||
} else if (map->hasher == gu_string_hasher) {
|
} 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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ GU_API_DECL void
|
|||||||
gu_map_iter(GuMap* ht, GuMapItor* itor, GuExn* err);
|
gu_map_iter(GuMap* ht, GuMapItor* itor, GuExn* err);
|
||||||
|
|
||||||
GU_API bool
|
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;
|
typedef GuMap GuIntMap;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user