Add pointer magic operators to hb_atomic_ptr_t
This commit is contained in:
parent
f6e7cb51b1
commit
f6fc5574d3
|
@ -290,6 +290,9 @@ struct hb_atomic_ptr_t
|
||||||
inline T *get (void) const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
|
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 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 <typename C> inline operator C * (void) const { return get (); }
|
||||||
|
|
||||||
mutable T *v;
|
mutable T *v;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -281,7 +281,7 @@ static void
|
||||||
free_langs (void)
|
free_langs (void)
|
||||||
{
|
{
|
||||||
retry:
|
retry:
|
||||||
hb_language_item_t *first_lang = langs.get ();
|
hb_language_item_t *first_lang = langs;
|
||||||
if (unlikely (!langs.cmpexch (first_lang, nullptr)))
|
if (unlikely (!langs.cmpexch (first_lang, nullptr)))
|
||||||
goto retry;
|
goto retry;
|
||||||
|
|
||||||
|
@ -298,7 +298,7 @@ static hb_language_item_t *
|
||||||
lang_find_or_insert (const char *key)
|
lang_find_or_insert (const char *key)
|
||||||
{
|
{
|
||||||
retry:
|
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)
|
for (hb_language_item_t *lang = first_lang; lang; lang = lang->next)
|
||||||
if (*lang == key)
|
if (*lang == key)
|
||||||
|
@ -408,7 +408,7 @@ hb_language_get_default (void)
|
||||||
{
|
{
|
||||||
static hb_atomic_ptr_t <hb_language_t> default_language;
|
static hb_atomic_ptr_t <hb_language_t> default_language;
|
||||||
|
|
||||||
hb_language_t language = default_language.get ();
|
hb_language_t language = default_language;
|
||||||
if (unlikely (language == HB_LANGUAGE_INVALID))
|
if (unlikely (language == HB_LANGUAGE_INVALID))
|
||||||
{
|
{
|
||||||
language = hb_language_from_string (setlocale (LC_CTYPE, nullptr), -1);
|
language = hb_language_from_string (setlocale (LC_CTYPE, nullptr), -1);
|
||||||
|
|
|
@ -263,7 +263,7 @@ hb_face_destroy (hb_face_t *face)
|
||||||
{
|
{
|
||||||
if (!hb_object_destroy (face)) return;
|
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_face_t::plan_node_t *next = node->next;
|
||||||
hb_shape_plan_destroy (node->shape_plan);
|
hb_shape_plan_destroy (node->shape_plan);
|
||||||
|
|
|
@ -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)
|
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_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;
|
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;
|
p->tag = tag;
|
||||||
|
|
||||||
retry:
|
retry:
|
||||||
hb_graphite2_tablelist_t *tlist = face_data->tlist.get ();
|
hb_graphite2_tablelist_t *tlist = face_data->tlist;
|
||||||
p->next = tlist;
|
p->next = tlist;
|
||||||
|
|
||||||
if (unlikely (!face_data->tlist.cmpexch (tlist, p)))
|
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)
|
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_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 *prev = nullptr;
|
||||||
hb_graphite2_tablelist_t *curr = tlist;
|
hb_graphite2_tablelist_t *curr = tlist;
|
||||||
|
@ -164,7 +164,7 @@ _hb_graphite2_shaper_face_data_create (hb_face_t *face)
|
||||||
void
|
void
|
||||||
_hb_graphite2_shaper_face_data_destroy (hb_graphite2_face_data_t *data)
|
_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)
|
while (tlist)
|
||||||
{
|
{
|
||||||
|
|
|
@ -795,6 +795,7 @@ struct hb_lazy_loader_t : hb_data_wrapper_t<Data, WheresData>
|
||||||
|
|
||||||
inline const Returned * operator -> (void) const { return get (); }
|
inline const Returned * operator -> (void) const { return get (); }
|
||||||
inline const Returned & operator * (void) const { return *get (); }
|
inline const Returned & operator * (void) const { return *get (); }
|
||||||
|
template <typename C> inline operator const C * (void) const { return get (); }
|
||||||
|
|
||||||
inline Data * get_data (void) const
|
inline Data * get_data (void) const
|
||||||
{
|
{
|
||||||
|
|
|
@ -279,7 +279,7 @@ data_destroy_arabic (void *data)
|
||||||
{
|
{
|
||||||
arabic_shape_plan_t *arabic_plan = (arabic_shape_plan_t *) 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);
|
free (data);
|
||||||
}
|
}
|
||||||
|
@ -389,7 +389,7 @@ arabic_fallback_shape (const hb_ot_shape_plan_t *plan,
|
||||||
return;
|
return;
|
||||||
|
|
||||||
retry:
|
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))
|
if (unlikely (!fallback_plan))
|
||||||
{
|
{
|
||||||
/* This sucks. We need a font to build the fallback plan... */
|
/* This sucks. We need a font to build the fallback plan... */
|
||||||
|
|
|
@ -532,7 +532,7 @@ hb_shape_plan_create_cached2 (hb_face_t *face,
|
||||||
|
|
||||||
|
|
||||||
retry:
|
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. */
|
/* Don't look for plan in the cache if there were variation coordinates XXX Fix me. */
|
||||||
if (!hb_coords_present (coords, num_coords))
|
if (!hb_coords_present (coords, num_coords))
|
||||||
|
|
Loading…
Reference in New Issue