[map] Add hb_map_update()

pull/4009/head
Behdad Esfahbod 2 years ago
parent c350458539
commit 4f6079138d
  1. 1
      docs/harfbuzz-sections.txt
  2. 16
      src/hb-map.cc
  3. 4
      src/hb-map.h
  4. 7
      src/hb-map.hh
  5. 16
      src/test-map.cc

@ -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

@ -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

@ -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,

@ -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
*/

@ -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;

Loading…
Cancel
Save