[map] Add clear(), is_empty(), and get_population()
authorBehdad Esfahbod <behdad@behdad.org>
Wed, 30 May 2018 00:09:17 +0000 (17:09 -0700)
committerBehdad Esfahbod <behdad@behdad.org>
Wed, 30 May 2018 00:09:17 +0000 (17:09 -0700)
src/hb-map-private.hh
src/hb-map.cc
src/hb-map.h

index 7611021..64bcffc 100644 (file)
@@ -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);
 
index a317d9c..702a926 100644 (file)
@@ -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
index e24bfc4..6182283 100644 (file)
@@ -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);