[map] Add hb_map_update()

This commit is contained in:
Behdad Esfahbod 2023-01-04 13:58:46 -07:00
parent c350458539
commit 4f6079138d
5 changed files with 42 additions and 2 deletions

View File

@ -546,6 +546,7 @@ hb_map_get_population
hb_map_is_empty
hb_map_is_equal
hb_map_hash
hb_map_update
hb_map_next
HB_MAP_VALUE_INVALID
hb_map_t

View File

@ -341,6 +341,22 @@ hb_map_hash (const hb_map_t *map)
return map->hash ();
}
/**
* hb_map_update:
* @map: A map
* @other: Another map
*
* Add the contents of @other to @map.
*
* Since: REPLACEME
**/
HB_EXTERN void
hb_map_update (hb_map_t *map,
const hb_map_t *other)
{
map->update (*other);
}
/**
* hb_map_next:
* @map: A map

View File

@ -118,6 +118,10 @@ HB_EXTERN hb_bool_t
hb_map_has (const hb_map_t *map,
hb_codepoint_t key);
HB_EXTERN void
hb_map_update (hb_map_t *map,
const hb_map_t *other);
/* Pass -1 in for idx to get started. */
HB_EXTERN hb_bool_t
hb_map_next (const hb_map_t *map,

View File

@ -308,6 +308,13 @@ struct hb_hashmap_t
unsigned int get_population () const { return population; }
void update (const hb_hashmap_t &other)
{
if (unlikely (!successful)) return;
hb_copy (other, *this);
}
/*
* Iterator
*/

View File

@ -314,7 +314,7 @@ main (int argc, char **argv)
hb_codepoint_t k;
hb_codepoint_t v;
unsigned pop = 0;
for (signed i;
for (signed i = -1;
m.next (&i, &k, &v);)
{
pop++;
@ -326,7 +326,19 @@ main (int argc, char **argv)
else if (k == 6) assert (v == 8);
else assert (false);
}
assert (pop = m.get_population ());
assert (pop == m.get_population ());
}
/* Test update */
{
hb_map_t m1, m2;
m1.set (1, 2);
m1.set (2, 4);
m2.set (1, 3);
m1.update (m2);
assert (m1.get_population () == 2);
assert (m1[1] == 3);
assert (m1[2] == 4);
}
return 0;