hb-ot-layout-gsub-private.h \
hb-ot-layout-open-private.h \
hb-ot-layout-private.h \
- hb-refcount-private.h \
+ hb-object-private.h \
$(NULL)
HBHEADERS = \
#include "hb-private.h"
#include "hb-blob.h"
-#include "hb-refcount-private.h"
struct _hb_blob_t {
hb_reference_count_t ref_count;
{
hb_blob_t *blob;
- blob = calloc (1, sizeof (hb_blob_t));
- if (!blob) {
+ if (!HB_OBJECT_DO_CREATE (blob)) {
if (destroy)
destroy (user_data);
return &_hb_blob_nil;
}
- HB_OBJECT_DO_CREATE (blob);
-
blob->data = data;
blob->len = len;
blob->mode = mode;
#include "hb-private.h"
#include "hb-font.h"
-#include "hb-refcount-private.h"
HB_BEGIN_DECLS
{
hb_font_callbacks_t *fcallbacks;
- fcallbacks = calloc (1, sizeof (hb_font_callbacks_t));
- if (!fcallbacks)
+ if (!HB_OBJECT_DO_CREATE (fcallbacks))
return &_hb_font_callbacks_nil;
- HB_OBJECT_DO_CREATE (fcallbacks);
-
return fcallbacks;
}
{
hb_font_callbacks_t *fcallbacks;
- fcallbacks = calloc (1, sizeof (hb_font_callbacks_t));
- if (!fcallbacks)
+ if (!HB_OBJECT_DO_CREATE (fcallbacks))
return &_hb_font_callbacks_nil;
*fcallbacks = *other_fcallbacks;
- HB_OBJECT_DO_CREATE (fcallbacks);
+
+ /* re-init refcount */
+ HB_OBJECT_DO_INIT (fcallbacks);
return fcallbacks;
}
{
hb_unicode_callbacks_t *ucallbacks;
- ucallbacks = calloc (1, sizeof (hb_unicode_callbacks_t));
- if (!ucallbacks)
+ if (!HB_OBJECT_DO_CREATE (ucallbacks))
return &_hb_unicode_callbacks_nil;
- HB_OBJECT_DO_CREATE (ucallbacks);
-
return ucallbacks;
}
{
hb_unicode_callbacks_t *ucallbacks;
- ucallbacks = calloc (1, sizeof (hb_unicode_callbacks_t));
- if (!ucallbacks)
+ if (!HB_OBJECT_DO_CREATE (ucallbacks))
return &_hb_unicode_callbacks_nil;
*ucallbacks = *other_ucallbacks;
- HB_OBJECT_DO_CREATE (ucallbacks);
+ HB_OBJECT_DO_INIT (ucallbacks);
return ucallbacks;
}
{
hb_face_t *face;
- face = calloc (1, sizeof (hb_face_t));
- if (!face)
+ if (!HB_OBJECT_DO_CREATE (face))
return &_hb_face_nil;
- HB_OBJECT_DO_CREATE (face);
-
face->blob = hb_blob_reference (blob);
face->index = index;
{
hb_face_t *face;
- face = calloc (1, sizeof (hb_face_t));
- if (!face) {
+ if (!HB_OBJECT_DO_CREATE (face)) {
if (destroy)
destroy (user_data);
return &_hb_face_nil;
}
- HB_OBJECT_DO_CREATE (face);
-
face->get_table = get_table;
face->destroy = destroy;
face->user_data = user_data;
{
hb_font_t *font;
- font = calloc (1, sizeof (hb_font_t));
- if (!font)
+ if (!HB_OBJECT_DO_CREATE (font))
return &_hb_font_nil;
- HB_OBJECT_DO_CREATE (font);
-
font->face = hb_face_reference (face);
return font;
--- /dev/null
+/*
+ * Copyright (C) 2007 Chris Wilson
+ * Copyright (C) 2009 Red Hat, Inc.
+ *
+ * This is part of HarfBuzz, an OpenType Layout engine library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Contributor(s):
+ * Chris Wilson <chris@chris-wilson.co.uk>
+ * Red Hat Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_REFCOUNT_PRIVATE_H
+#define HB_REFCOUNT_PRIVATE_H
+
+typedef int hb_atomic_int_t;
+
+/* Encapsulate operations on the object's reference count */
+typedef struct {
+ hb_atomic_int_t ref_count;
+} hb_reference_count_t;
+
+/* XXX add real atomic ops */
+#define _hb_reference_count_inc(RC) ((RC).ref_count++)
+#define _hb_reference_count_dec_and_test(RC) ((RC).ref_count-- == 1)
+
+#define HB_REFERENCE_COUNT_INIT(RC, VALUE) ((RC).ref_count = (VALUE))
+
+#define HB_REFERENCE_COUNT_GET_VALUE(RC) ((RC).ref_count+0)
+#define HB_REFERENCE_COUNT_SET_VALUE(RC, VALUE) ((RC).ref_count = (VALUE), 0)
+
+#define HB_REFERENCE_COUNT_INVALID_VALUE ((hb_atomic_int_t) -1)
+#define HB_REFERENCE_COUNT_INVALID {HB_REFERENCE_COUNT_INVALID_VALUE}
+
+#define HB_REFERENCE_COUNT_IS_INVALID(RC) (HB_REFERENCE_COUNT_GET_VALUE (RC) == HB_REFERENCE_COUNT_INVALID_VALUE)
+
+#define HB_REFERENCE_COUNT_HAS_REFERENCE(RC) (HB_REFERENCE_COUNT_GET_VALUE (RC) > 0)
+
+
+
+/* Helper macros */
+
+#define HB_OBJECT_IS_INERT(obj) \
+ ((obj) == NULL || HB_REFERENCE_COUNT_IS_INVALID ((obj)->ref_count))
+
+#define HB_OBJECT_DO_INIT_EXPR(obj) \
+ HB_REFERENCE_COUNT_INIT (obj->ref_count, 1)
+
+#define HB_OBJECT_DO_INIT(obj) \
+ HB_STMT_START { \
+ HB_OBJECT_DO_INIT_EXPR (obj); \
+ } HB_STMT_END
+
+#define HB_OBJECT_DO_CREATE(obj) \
+ HB_LIKELY (( \
+ (obj) = calloc (1, sizeof (*(obj))), \
+ HB_OBJECT_DO_INIT_EXPR (obj), \
+ (obj) \
+ ))
+
+#define HB_OBJECT_DO_REFERENCE(obj) \
+ HB_STMT_START { \
+ if (HB_OBJECT_IS_INERT (obj)) \
+ return obj; \
+ assert (HB_REFERENCE_COUNT_HAS_REFERENCE (obj->ref_count)); \
+ _hb_reference_count_inc (obj->ref_count); \
+ return obj; \
+ } HB_STMT_END
+
+#define HB_OBJECT_DO_DESTROY(obj) \
+ HB_STMT_START { \
+ if (HB_OBJECT_IS_INERT (obj)) \
+ return; \
+ assert (HB_REFERENCE_COUNT_HAS_REFERENCE (obj->ref_count)); \
+ if (!_hb_reference_count_dec_and_test (obj->ref_count)) \
+ return; \
+ } HB_STMT_END
+
+
+#endif /* HB_REFCOUNT_PRIVATE_H */
#endif
}
+#include "hb-object-private.h"
+
#endif /* HB_PRIVATE_H */
+++ /dev/null
-/*
- * Copyright (C) 2007 Chris Wilson
- * Copyright (C) 2009 Red Hat, Inc.
- *
- * This is part of HarfBuzz, an OpenType Layout engine library.
- *
- * Permission is hereby granted, without written agreement and without
- * license or royalty fees, to use, copy, modify, and distribute this
- * software and its documentation for any purpose, provided that the
- * above copyright notice and the following two paragraphs appear in
- * all copies of this software.
- *
- * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
- * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
- * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
- * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- *
- * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
- * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
- * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
- *
- * Contributor(s):
- * Chris Wilson <chris@chris-wilson.co.uk>
- * Red Hat Author(s): Behdad Esfahbod
- */
-
-#ifndef HB_REFCOUNT_PRIVATE_H
-#define HB_REFCOUNT_PRIVATE_H
-
-typedef int hb_atomic_int_t;
-
-/* Encapsulate operations on the object's reference count */
-typedef struct {
- hb_atomic_int_t ref_count;
-} hb_reference_count_t;
-
-/* XXX add real atomic ops */
-#define _hb_reference_count_inc(RC) ((RC).ref_count++)
-#define _hb_reference_count_dec_and_test(RC) ((RC).ref_count-- == 1)
-
-#define HB_REFERENCE_COUNT_INIT(RC, VALUE) ((RC).ref_count = (VALUE))
-
-#define HB_REFERENCE_COUNT_GET_VALUE(RC) ((RC).ref_count+0)
-#define HB_REFERENCE_COUNT_SET_VALUE(RC, VALUE) ((RC).ref_count = (VALUE), 0)
-
-#define HB_REFERENCE_COUNT_INVALID_VALUE ((hb_atomic_int_t) -1)
-#define HB_REFERENCE_COUNT_INVALID {HB_REFERENCE_COUNT_INVALID_VALUE}
-
-#define HB_REFERENCE_COUNT_IS_INVALID(RC) (HB_REFERENCE_COUNT_GET_VALUE (RC) == HB_REFERENCE_COUNT_INVALID_VALUE)
-
-#define HB_REFERENCE_COUNT_HAS_REFERENCE(RC) (HB_REFERENCE_COUNT_GET_VALUE (RC) > 0)
-
-
-
-/* Helper macros */
-
-#define HB_OBJECT_IS_INERT(obj) \
- ((obj) == NULL || HB_REFERENCE_COUNT_IS_INVALID ((obj)->ref_count))
-
-#define HB_OBJECT_DO_CREATE(obj) \
- HB_STMT_START { \
- HB_REFERENCE_COUNT_INIT (obj->ref_count, 1); \
- } HB_STMT_END
-
-#define HB_OBJECT_DO_REFERENCE(obj) \
- HB_STMT_START { \
- if (HB_OBJECT_IS_INERT (obj)) \
- return obj; \
- assert (HB_REFERENCE_COUNT_HAS_REFERENCE (obj->ref_count)); \
- _hb_reference_count_inc (obj->ref_count); \
- return obj; \
- } HB_STMT_END
-
-#define HB_OBJECT_DO_DESTROY(obj) \
- HB_STMT_START { \
- if (HB_OBJECT_IS_INERT (obj)) \
- return; \
- assert (HB_REFERENCE_COUNT_HAS_REFERENCE (obj->ref_count)); \
- if (!_hb_reference_count_dec_and_test (obj->ref_count)) \
- return; \
- } HB_STMT_END
-
-
-#endif /* HB_REFCOUNT_PRIVATE_H */