From ec6f9c2fd03a49d1e91cbaefa5bdbbfb35dff92e Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Thu, 21 Apr 2011 18:35:58 -0400 Subject: [PATCH] Further simplify object handling --- src/hb-object-private.hh | 53 ++++++++++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/src/hb-object-private.hh b/src/hb-object-private.hh index 7bad2c7..ff66d1d 100644 --- a/src/hb-object-private.hh +++ b/src/hb-object-private.hh @@ -89,34 +89,35 @@ struct _hb_object_header_t { }; +HB_END_DECLS + + +template +static inline Type *hb_object_create () { return (Type *) hb_object_header_t::create (sizeof (Type)); } + +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) { obj->header.reference (); return obj; } + +template +static inline bool hb_object_destroy (Type *obj) { return obj->header.destroy (); } + +template +static inline void hb_object_trace (const Type *obj) { obj->header.trace (__FUNCTION__); } + + +HB_BEGIN_DECLS + + /* Object allocation and lifecycle manamgement macros */ -#define TRACE_OBJECT(obj) \ - obj->header.trace (__FUNCTION__) - -#define HB_OBJECT_IS_INERT(obj) \ - (unlikely ((obj)->header.is_inert ())) - -#define HB_OBJECT_DO_CREATE(Type, obj) \ - likely (( \ - ((obj) = (Type *) hb_object_header_t::create (sizeof (Type))), \ - TRACE_OBJECT (obj), \ - (obj) \ - )) - -#define HB_OBJECT_DO_REFERENCE(obj) \ - HB_STMT_START { \ - TRACE_OBJECT (obj); \ - obj->header.reference (); \ - return obj; \ - } HB_STMT_END - -#define HB_OBJECT_DO_DESTROY(obj) \ - HB_STMT_START { \ - TRACE_OBJECT (obj); \ - if (!obj->header.destroy ()) \ - return; \ - } HB_STMT_END +#define HB_TRACE_OBJECT(obj) hb_object_trace (obj) +#define HB_OBJECT_DO_CREATE(Type, obj) likely (obj = hb_object_create ()) +#define HB_OBJECT_IS_INERT(obj) hb_object_is_inert (obj) +#define HB_OBJECT_DO_REFERENCE(obj) return hb_object_reference (obj) +#define HB_OBJECT_DO_DESTROY(obj) if (!hb_object_destroy (obj)) return HB_END_DECLS -- 2.7.4