diff --git a/src/hb-object-private.hh b/src/hb-object-private.hh index 1befd6bad..e9aac5d26 100644 --- a/src/hb-object-private.hh +++ b/src/hb-object-private.hh @@ -95,6 +95,74 @@ struct hb_user_data_array_t }; +/* object */ + +template +static inline void hb_object_trace (const Type *obj, const char *function) +{ + obj->header.trace (function); +} + +template +static inline Type *hb_object_create (void) +{ + Type *obj = (Type *) calloc (1, sizeof (Type)); + + if (unlikely (!obj)) + return obj; + + hb_object_init (obj); + hb_object_trace (obj, HB_FUNC); + return obj; +} +template +static inline void hb_object_init (Type *obj) +{ + obj->header.init (); +} +template +static inline bool hb_object_is_inert (const Type *obj) +{ + return unlikely (obj->header.is_inert ()); +} +template +static inline Type *hb_object_reference (Type *obj) +{ + if (unlikely (!obj || obj->header.is_inert ())) + return obj; + hb_object_trace (obj, HB_FUNC); + obj->header.reference (); + return obj; +} +template +static inline bool hb_object_destroy (Type *obj) +{ + if (unlikely (!obj || obj->header.is_inert ())) + return false; + hb_object_trace (obj, HB_FUNC); + return obj->header.destroy (); +} +template +static inline bool hb_object_set_user_data (Type *obj, + hb_user_data_key_t *key, + void * data, + hb_destroy_func_t destroy, + hb_bool_t replace) +{ + if (unlikely (!obj || obj->header.is_inert ())) + return false; + return obj->header.set_user_data (key, data, destroy, replace); +} + +template +static inline void *hb_object_get_user_data (Type *obj, + hb_user_data_key_t *key) +{ + if (unlikely (!obj || obj->header.is_inert ())) + return NULL; + return obj->header.get_user_data (key); +} + /* object_header */ struct hb_object_header_t @@ -106,16 +174,6 @@ struct hb_object_header_t private: - template friend Type *hb_object_create (void); - static inline void *create (unsigned int size) { - hb_object_header_t *obj = (hb_object_header_t *) calloc (1, size); - - if (likely (obj)) - obj->init (); - - return obj; - } - template friend void hb_object_init (Type *obj); inline void init (void) { ref_count.init (1); @@ -174,68 +232,5 @@ struct hb_object_header_t }; -/* object */ - -template -static inline void hb_object_trace (const Type *obj, const char *function) -{ - obj->header.trace (function); -} - -template -static inline Type *hb_object_create (void) -{ - Type *obj = (Type *) hb_object_header_t::create (sizeof (Type)); - hb_object_trace (obj, HB_FUNC); - return obj; -} -template -static inline void hb_object_init (Type *obj) -{ - obj->header.init (); -} -template -static inline bool hb_object_is_inert (const Type *obj) -{ - return unlikely (obj->header.is_inert ()); -} -template -static inline Type *hb_object_reference (Type *obj) -{ - if (unlikely (!obj || obj->header.is_inert ())) - return obj; - hb_object_trace (obj, HB_FUNC); - obj->header.reference (); - return obj; -} -template -static inline bool hb_object_destroy (Type *obj) -{ - if (unlikely (!obj || obj->header.is_inert ())) - return false; - hb_object_trace (obj, HB_FUNC); - return obj->header.destroy (); -} -template -static inline bool hb_object_set_user_data (Type *obj, - hb_user_data_key_t *key, - void * data, - hb_destroy_func_t destroy, - hb_bool_t replace) -{ - if (unlikely (!obj || obj->header.is_inert ())) - return false; - return obj->header.set_user_data (key, data, destroy, replace); -} - -template -static inline void *hb_object_get_user_data (Type *obj, - hb_user_data_key_t *key) -{ - if (unlikely (!obj || obj->header.is_inert ())) - return NULL; - return obj->header.get_user_data (key); -} - #endif /* HB_OBJECT_PRIVATE_HH */