diff --git a/src/hb-cache.hh b/src/hb-cache.hh index 55a80024f..3bcfc9e3d 100644 --- a/src/hb-cache.hh +++ b/src/hb-cache.hh @@ -32,13 +32,18 @@ /* Implements a lockfree cache for int->int functions. */ -template +template struct hb_cache_t { static_assert ((key_bits >= cache_bits), ""); static_assert ((key_bits + value_bits - cache_bits <= 8 * sizeof (hb_atomic_int_t)), ""); static_assert (sizeof (hb_atomic_int_t) == sizeof (unsigned int), ""); + using item_t = typename std::conditional::type; + void init () { clear (); } void fini () {} @@ -70,11 +75,15 @@ struct hb_cache_t } private: - hb_atomic_int_t values[1u< hb_cmap_cache_t; -typedef hb_cache_t<16, 24, 8> hb_advance_cache_t; + +template +using hb_cmap_cache_t = hb_cache_t<21, 16, 8, thread_safe>; + +template +using hb_advance_cache_t = hb_cache_t<16, 24, 8, thread_safe>; #endif /* HB_CACHE_HH */ diff --git a/src/hb-ft.cc b/src/hb-ft.cc index 8965fcb4f..081d716cb 100644 --- a/src/hb-ft.cc +++ b/src/hb-ft.cc @@ -89,7 +89,7 @@ struct hb_ft_font_t mutable hb_mutex_t lock; FT_Face ft_face; mutable unsigned cached_serial; - mutable hb_advance_cache_t advance_cache; + mutable hb_advance_cache_t advance_cache; }; static hb_ft_font_t * diff --git a/src/hb-ot-font.cc b/src/hb-ot-font.cc index ef28c7d65..78230bd1a 100644 --- a/src/hb-ot-font.cc +++ b/src/hb-ot-font.cc @@ -65,7 +65,7 @@ struct hb_ot_font_t /* h_advance caching */ mutable hb_atomic_int_t cached_coords_serial; - mutable hb_atomic_ptr_t advance_cache; + mutable hb_atomic_ptr_t> advance_cache; }; static hb_ot_font_t * @@ -161,14 +161,14 @@ hb_ot_get_glyph_h_advances (hb_font_t* font, void* font_data, bool use_cache = false; #endif - hb_advance_cache_t *cache = nullptr; + hb_advance_cache_t<> *cache = nullptr; if (use_cache) { retry: cache = ot_font->advance_cache.get_acquire (); if (unlikely (!cache)) { - cache = (hb_advance_cache_t *) hb_malloc (sizeof (hb_advance_cache_t)); + cache = (hb_advance_cache_t<> *) hb_malloc (sizeof (hb_advance_cache_t<>)); if (unlikely (!cache)) { use_cache = false;