src/hb-map-private.hh | 29 +++++++++++++++++++++-------- src/hb-map.cc | 43 +++++++++++++++++++++++++++++++++++++++++++ src/hb-map.h | 17 +++++++++-------- 3 files changed, 73 insertions(+), 16 deletions(-)
New commits: commit 661e9ae4a55c198eb9fdb2c104979dd55a0fa1f1 Author: Behdad Esfahbod <[email protected]> Date: Tue May 29 17:09:17 2018 -0700 [map] Add clear(), is_empty(), and get_population() diff --git a/src/hb-map-private.hh b/src/hb-map-private.hh index 7611021a..64bcffc2 100644 --- a/src/hb-map-private.hh +++ b/src/hb-map-private.hh @@ -66,8 +66,7 @@ struct hb_map_t inline void init_shallow (void) { in_error = false; - population = 0; - occupancy = 0; + population = occupancy = 0; mask = 0; prime = 0; items = nullptr; @@ -105,8 +104,7 @@ struct hb_map_t item_t *old_items = items; /* Switch to new, empty, array. */ - population = 0; - occupancy = 0; + population = occupancy = 0; mask = new_size - 1; prime = prime_for (power); items = new_items; @@ -167,6 +165,22 @@ struct hb_map_t static const hb_codepoint_t INVALID = HB_MAP_VALUE_INVALID; + inline void clear (void) + { + memset (items, 0xFF, ((size_t) mask + 1) * sizeof (item_t)); + population = occupancy = 0; + } + + inline bool is_empty (void) const + { + return population != 0; + } + + inline unsigned int get_population () const + { + return population; + } + protected: static HB_INTERNAL unsigned int prime_for (unsigned int shift); diff --git a/src/hb-map.cc b/src/hb-map.cc index a317d9c5..702a926e 100644 --- a/src/hb-map.cc +++ b/src/hb-map.cc @@ -228,6 +228,49 @@ hb_map_has (const hb_map_t *map, } +/** + * hb_map_clear: + * @map: a map. + * + * + * + * Since: REPLACEME + **/ +void +hb_map_clear (hb_map_t *map) +{ + return map->clear (); +} + +/** + * hb_map_is_empty: + * @map: a map. + * + * + * + * Since: REPLACEME + **/ +hb_bool_t +hb_map_is_empty (const hb_map_t *map) +{ + return map->is_empty (); +} + +/** + * hb_map_get_population: + * @map: a map. + * + * + * + * Since: REPLACEME + **/ +unsigned int +hb_map_get_population (const hb_map_t *map) +{ + return map->get_population (); +} + + /* Following comment and table copied from glib. */ /* Each table size has an associated prime modulo (the first prime * lower than the table size) used to find the initial bucket. Probing diff --git a/src/hb-map.h b/src/hb-map.h index e24bfc4f..61822830 100644 --- a/src/hb-map.h +++ b/src/hb-map.h @@ -73,14 +73,6 @@ HB_EXTERN hb_bool_t hb_map_allocation_successful (const hb_map_t *map); /* - HB_EXTERN void - hb_map_clear (hb_map_t *map); - - HB_EXTERN hb_bool_t - hb_map_is_empty (const hb_map_t *map); - - HB_EXTERN unsigned int - hb_map_get_population (const hb_map_t *map); HB_EXTERN hb_bool_t hb_map_is_equal (const hb_map_t *map, @@ -88,6 +80,15 @@ hb_map_allocation_successful (const hb_map_t *map); */ HB_EXTERN void +hb_map_clear (hb_map_t *map); + +HB_EXTERN hb_bool_t +hb_map_is_empty (const hb_map_t *map); + +HB_EXTERN unsigned int +hb_map_get_population (const hb_map_t *map); + +HB_EXTERN void hb_map_set (hb_map_t *map, hb_codepoint_t key, hb_codepoint_t value); commit b6959c33e23b464ddbe5fe98fafc80bbb669189c Author: Behdad Esfahbod <[email protected]> Date: Tue May 29 17:02:22 2018 -0700 [map] Minor diff --git a/src/hb-map-private.hh b/src/hb-map-private.hh index 07d5d0da..7611021a 100644 --- a/src/hb-map-private.hh +++ b/src/hb-map-private.hh @@ -132,12 +132,11 @@ struct hb_map_t return; /* Trying to delete non-existent key. */ /* Accounting. */ - if (items[i].is_tombstone ()) - occupancy--; - else if (!items[i].is_unused ()) + if (!items[i].is_unused ()) { - population--; occupancy--; + if (items[i].value != INVALID) + population--; } occupancy++; if (value != INVALID) _______________________________________________ HarfBuzz mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/harfbuzz
