diff --git a/src/hb-atomic.hh b/src/hb-atomic.hh index 697de19c5..49c2809e2 100644 --- a/src/hb-atomic.hh +++ b/src/hb-atomic.hh @@ -290,6 +290,9 @@ struct hb_atomic_ptr_t inline T *get (void) const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } inline bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } + inline T * operator -> (void) const { return get (); } + template inline operator C * (void) const { return get (); } + mutable T *v; }; diff --git a/src/hb-common.cc b/src/hb-common.cc index d7c1921f3..37be8a34e 100644 --- a/src/hb-common.cc +++ b/src/hb-common.cc @@ -281,7 +281,7 @@ static void free_langs (void) { retry: - hb_language_item_t *first_lang = langs.get (); + hb_language_item_t *first_lang = langs; if (unlikely (!langs.cmpexch (first_lang, nullptr))) goto retry; @@ -298,7 +298,7 @@ static hb_language_item_t * lang_find_or_insert (const char *key) { retry: - hb_language_item_t *first_lang = langs.get (); + hb_language_item_t *first_lang = langs; for (hb_language_item_t *lang = first_lang; lang; lang = lang->next) if (*lang == key) @@ -408,7 +408,7 @@ hb_language_get_default (void) { static hb_atomic_ptr_t default_language; - hb_language_t language = default_language.get (); + hb_language_t language = default_language; if (unlikely (language == HB_LANGUAGE_INVALID)) { language = hb_language_from_string (setlocale (LC_CTYPE, nullptr), -1); diff --git a/src/hb-face.cc b/src/hb-face.cc index 50ab10e38..a0f8047f3 100644 --- a/src/hb-face.cc +++ b/src/hb-face.cc @@ -263,7 +263,7 @@ hb_face_destroy (hb_face_t *face) { if (!hb_object_destroy (face)) return; - for (hb_face_t::plan_node_t *node = face->shape_plans.get (); node; ) + for (hb_face_t::plan_node_t *node = face->shape_plans; node; ) { hb_face_t::plan_node_t *next = node->next; hb_shape_plan_destroy (node->shape_plan); diff --git a/src/hb-graphite2.cc b/src/hb-graphite2.cc index 971241f92..24ee3d507 100644 --- a/src/hb-graphite2.cc +++ b/src/hb-graphite2.cc @@ -71,7 +71,7 @@ struct hb_graphite2_face_data_t static const void *hb_graphite2_get_table (const void *data, unsigned int tag, size_t *len) { hb_graphite2_face_data_t *face_data = (hb_graphite2_face_data_t *) data; - hb_graphite2_tablelist_t *tlist = face_data->tlist.get (); + hb_graphite2_tablelist_t *tlist = face_data->tlist; hb_blob_t *blob = nullptr; @@ -94,7 +94,7 @@ static const void *hb_graphite2_get_table (const void *data, unsigned int tag, s p->tag = tag; retry: - hb_graphite2_tablelist_t *tlist = face_data->tlist.get (); + hb_graphite2_tablelist_t *tlist = face_data->tlist; p->next = tlist; if (unlikely (!face_data->tlist.cmpexch (tlist, p))) @@ -110,7 +110,7 @@ retry: static void hb_graphite2_release_table(const void *data, const void *table_buffer) { hb_graphite2_face_data_t *face_data = (hb_graphite2_face_data_t *) data; - hb_graphite2_tablelist_t *tlist = face_data->tlist.get(); + hb_graphite2_tablelist_t *tlist = face_data->tlist; hb_graphite2_tablelist_t *prev = nullptr; hb_graphite2_tablelist_t *curr = tlist; @@ -164,7 +164,7 @@ _hb_graphite2_shaper_face_data_create (hb_face_t *face) void _hb_graphite2_shaper_face_data_destroy (hb_graphite2_face_data_t *data) { - hb_graphite2_tablelist_t *tlist = data->tlist.get (); + hb_graphite2_tablelist_t *tlist = data->tlist; while (tlist) { diff --git a/src/hb-machinery.hh b/src/hb-machinery.hh index 465bbb14f..f58050da0 100644 --- a/src/hb-machinery.hh +++ b/src/hb-machinery.hh @@ -795,6 +795,7 @@ struct hb_lazy_loader_t : hb_data_wrapper_t inline const Returned * operator -> (void) const { return get (); } inline const Returned & operator * (void) const { return *get (); } + template inline operator const C * (void) const { return get (); } inline Data * get_data (void) const { diff --git a/src/hb-ot-shape-complex-arabic.cc b/src/hb-ot-shape-complex-arabic.cc index 8e56dde3d..50a52136b 100644 --- a/src/hb-ot-shape-complex-arabic.cc +++ b/src/hb-ot-shape-complex-arabic.cc @@ -279,7 +279,7 @@ data_destroy_arabic (void *data) { arabic_shape_plan_t *arabic_plan = (arabic_shape_plan_t *) data; - arabic_fallback_plan_destroy (arabic_plan->fallback_plan.get ()); + arabic_fallback_plan_destroy (arabic_plan->fallback_plan); free (data); } @@ -389,7 +389,7 @@ arabic_fallback_shape (const hb_ot_shape_plan_t *plan, return; retry: - arabic_fallback_plan_t *fallback_plan = arabic_plan->fallback_plan.get (); + arabic_fallback_plan_t *fallback_plan = arabic_plan->fallback_plan; if (unlikely (!fallback_plan)) { /* This sucks. We need a font to build the fallback plan... */ diff --git a/src/hb-shape-plan.cc b/src/hb-shape-plan.cc index 8d002f8a7..f2f210196 100644 --- a/src/hb-shape-plan.cc +++ b/src/hb-shape-plan.cc @@ -532,7 +532,7 @@ hb_shape_plan_create_cached2 (hb_face_t *face, retry: - hb_face_t::plan_node_t *cached_plan_nodes = face->shape_plans.get (); + hb_face_t::plan_node_t *cached_plan_nodes = face->shape_plans; /* Don't look for plan in the cache if there were variation coordinates XXX Fix me. */ if (!hb_coords_present (coords, num_coords))