You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-09 12:50:35 +00:00
HarfBuzz: Update to version 5.2.0, add new Unicode 15 blocks and scripts.
This commit is contained in:
31
thirdparty/harfbuzz/src/hb-object.hh
vendored
31
thirdparty/harfbuzz/src/hb-object.hh
vendored
@@ -144,14 +144,14 @@ struct hb_reference_count_t
|
||||
{
|
||||
mutable hb_atomic_int_t ref_count;
|
||||
|
||||
void init (int v = 1) { ref_count.set_relaxed (v); }
|
||||
int get_relaxed () const { return ref_count.get_relaxed (); }
|
||||
void init (int v = 1) { ref_count = v; }
|
||||
int get_relaxed () const { return ref_count; }
|
||||
int inc () const { return ref_count.inc (); }
|
||||
int dec () const { return ref_count.dec (); }
|
||||
void fini () { ref_count.set_relaxed (-0x0000DEAD); }
|
||||
void fini () { ref_count = -0x0000DEAD; }
|
||||
|
||||
bool is_inert () const { return !ref_count.get_relaxed (); }
|
||||
bool is_valid () const { return ref_count.get_relaxed () > 0; }
|
||||
bool is_inert () const { return !ref_count; }
|
||||
bool is_valid () const { return ref_count > 0; }
|
||||
};
|
||||
|
||||
|
||||
@@ -214,15 +214,15 @@ static inline void hb_object_trace (const Type *obj, const char *function)
|
||||
obj ? obj->header.ref_count.get_relaxed () : 0);
|
||||
}
|
||||
|
||||
template <typename Type>
|
||||
static inline Type *hb_object_create ()
|
||||
template <typename Type, typename ...Ts>
|
||||
static inline Type *hb_object_create (Ts... ds)
|
||||
{
|
||||
Type *obj = (Type *) hb_calloc (1, sizeof (Type));
|
||||
|
||||
if (unlikely (!obj))
|
||||
return obj;
|
||||
|
||||
new (obj) Type;
|
||||
new (obj) Type (std::forward<Ts> (ds)...);
|
||||
|
||||
hb_object_init (obj);
|
||||
hb_object_trace (obj, HB_FUNC);
|
||||
@@ -233,7 +233,7 @@ template <typename Type>
|
||||
static inline void hb_object_init (Type *obj)
|
||||
{
|
||||
obj->header.ref_count.init ();
|
||||
obj->header.writable.set_relaxed (true);
|
||||
obj->header.writable = true;
|
||||
obj->header.user_data.init ();
|
||||
}
|
||||
template <typename Type>
|
||||
@@ -244,12 +244,12 @@ static inline bool hb_object_is_valid (const Type *obj)
|
||||
template <typename Type>
|
||||
static inline bool hb_object_is_immutable (const Type *obj)
|
||||
{
|
||||
return !obj->header.writable.get_relaxed ();
|
||||
return !obj->header.writable;
|
||||
}
|
||||
template <typename Type>
|
||||
static inline void hb_object_make_immutable (const Type *obj)
|
||||
{
|
||||
obj->header.writable.set_relaxed (false);
|
||||
obj->header.writable = false;
|
||||
}
|
||||
template <typename Type>
|
||||
static inline Type *hb_object_reference (Type *obj)
|
||||
@@ -273,7 +273,8 @@ static inline bool hb_object_destroy (Type *obj)
|
||||
|
||||
hb_object_fini (obj);
|
||||
|
||||
obj->~Type ();
|
||||
if (!std::is_trivially_destructible<Type>::value)
|
||||
obj->~Type ();
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -281,7 +282,7 @@ template <typename Type>
|
||||
static inline void hb_object_fini (Type *obj)
|
||||
{
|
||||
obj->header.ref_count.fini (); /* Do this before user_data */
|
||||
hb_user_data_array_t *user_data = obj->header.user_data.get ();
|
||||
hb_user_data_array_t *user_data = obj->header.user_data.get_acquire ();
|
||||
if (user_data)
|
||||
{
|
||||
user_data->fini ();
|
||||
@@ -301,7 +302,7 @@ static inline bool hb_object_set_user_data (Type *obj,
|
||||
assert (hb_object_is_valid (obj));
|
||||
|
||||
retry:
|
||||
hb_user_data_array_t *user_data = obj->header.user_data.get ();
|
||||
hb_user_data_array_t *user_data = obj->header.user_data.get_acquire ();
|
||||
if (unlikely (!user_data))
|
||||
{
|
||||
user_data = (hb_user_data_array_t *) hb_calloc (sizeof (hb_user_data_array_t), 1);
|
||||
@@ -326,7 +327,7 @@ static inline void *hb_object_get_user_data (Type *obj,
|
||||
if (unlikely (!obj || obj->header.is_inert ()))
|
||||
return nullptr;
|
||||
assert (hb_object_is_valid (obj));
|
||||
hb_user_data_array_t *user_data = obj->header.user_data.get ();
|
||||
hb_user_data_array_t *user_data = obj->header.user_data.get_acquire ();
|
||||
if (!user_data)
|
||||
return nullptr;
|
||||
return user_data->get (key);
|
||||
|
||||
Reference in New Issue
Block a user