From 80a6833b032bc63b4e8c3da6489d3767af1168f3 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 11 May 2011 18:14:44 -0400 Subject: [PATCH] [API] Add hb_*_get_empty() for all objects --- src/hb-buffer.cc | 6 ++++++ src/hb-buffer.h | 3 +++ src/hb-font.cc | 18 ++++++++++++++++++ src/hb-font.h | 9 +++++++++ src/hb-unicode.cc | 6 ++++++ src/hb-unicode.h | 3 +++ test/test-object.c | 36 +++++++++++++++++++++++++++++++++--- 7 files changed, 78 insertions(+), 3 deletions(-) diff --git a/src/hb-buffer.cc b/src/hb-buffer.cc index 6d0d4d456..7e79eefd2 100644 --- a/src/hb-buffer.cc +++ b/src/hb-buffer.cc @@ -152,6 +152,12 @@ hb_buffer_create (unsigned int pre_alloc_size) return buffer; } +hb_buffer_t * +hb_buffer_get_empty (void) +{ + return &_hb_buffer_nil; +} + hb_buffer_t * hb_buffer_reference (hb_buffer_t *buffer) { diff --git a/src/hb-buffer.h b/src/hb-buffer.h index 47a212395..020a12079 100644 --- a/src/hb-buffer.h +++ b/src/hb-buffer.h @@ -62,6 +62,9 @@ typedef struct _hb_glyph_position_t { hb_buffer_t * hb_buffer_create (unsigned int pre_alloc_size); +hb_buffer_t * +hb_buffer_get_empty (void); + hb_buffer_t * hb_buffer_reference (hb_buffer_t *buffer); diff --git a/src/hb-font.cc b/src/hb-font.cc index 6cd436d77..bb8f84c25 100644 --- a/src/hb-font.cc +++ b/src/hb-font.cc @@ -159,6 +159,12 @@ hb_font_funcs_create (void) return ffuncs; } +hb_font_funcs_t * +hb_font_funcs_get_empty (void) +{ + return &_hb_font_funcs_nil; +} + hb_font_funcs_t * hb_font_funcs_reference (hb_font_funcs_t *ffuncs) { @@ -404,6 +410,12 @@ hb_face_create_for_data (hb_blob_t *blob, (hb_destroy_func_t) _hb_face_for_data_closure_destroy); } +hb_face_t * +hb_face_get_empty (void) +{ + return &_hb_face_nil; +} + hb_face_t * hb_face_reference (hb_face_t *face) @@ -533,6 +545,12 @@ hb_font_create_sub_font (hb_font_t *parent) return font; } +hb_font_t * +hb_font_get_empty (void) +{ + return &_hb_font_nil; +} + hb_font_t * hb_font_reference (hb_font_t *font) { diff --git a/src/hb-font.h b/src/hb-font.h index ce81985c5..7f05144cf 100644 --- a/src/hb-font.h +++ b/src/hb-font.h @@ -52,6 +52,9 @@ hb_face_create_for_tables (hb_get_table_func_t get_table, void *user_data, hb_destroy_func_t destroy); +hb_face_t * +hb_face_get_empty (void); + hb_face_t * hb_face_reference (hb_face_t *face); @@ -87,6 +90,9 @@ typedef struct _hb_font_funcs_t hb_font_funcs_t; hb_font_funcs_t * hb_font_funcs_create (void); +hb_font_funcs_t * +hb_font_funcs_get_empty (void); + hb_font_funcs_t * hb_font_funcs_reference (hb_font_funcs_t *ffuncs); @@ -206,6 +212,9 @@ hb_font_create (hb_face_t *face); hb_font_t * hb_font_create_sub_font (hb_font_t *parent); +hb_font_t * +hb_font_get_empty (void); + hb_font_t * hb_font_reference (hb_font_t *font); diff --git a/src/hb-unicode.cc b/src/hb-unicode.cc index 943d7a774..c2d7311c1 100644 --- a/src/hb-unicode.cc +++ b/src/hb-unicode.cc @@ -125,6 +125,12 @@ hb_unicode_funcs_create (hb_unicode_funcs_t *parent) return ufuncs; } +hb_unicode_funcs_t * +hb_unicode_funcs_get_empty (void) +{ + return &_hb_unicode_funcs_nil; +} + hb_unicode_funcs_t * hb_unicode_funcs_reference (hb_unicode_funcs_t *ufuncs) { diff --git a/src/hb-unicode.h b/src/hb-unicode.h index 9e590d806..e7a200565 100644 --- a/src/hb-unicode.h +++ b/src/hb-unicode.h @@ -53,6 +53,9 @@ hb_unicode_funcs_get_default (void); hb_unicode_funcs_t * hb_unicode_funcs_create (hb_unicode_funcs_t *parent); +hb_unicode_funcs_t * +hb_unicode_funcs_get_empty (void); + hb_unicode_funcs_t * hb_unicode_funcs_reference (hb_unicode_funcs_t *ufuncs); diff --git a/test/test-object.c b/test/test-object.c index 1abe65cd5..1ad3b8885 100644 --- a/test/test-object.c +++ b/test/test-object.c @@ -43,7 +43,7 @@ create_blob (void) static void * create_blob_inert (void) { - return hb_blob_get_empty (); + return hb_blob_create (NULL, 0, HB_MEMORY_MODE_DUPLICATE, NULL, NULL); } static void * @@ -68,7 +68,7 @@ create_face (void) static void * create_face_inert (void) { - return hb_face_create_for_data ((hb_blob_t *) create_blob_inert (), 0); + return hb_face_create_for_data (hb_blob_get_empty (), 0); } static void * @@ -82,7 +82,7 @@ create_font (void) static void * create_font_inert (void) { - return hb_font_create (create_face_inert ()); + return hb_font_create (hb_face_get_empty ()); } static void * @@ -124,6 +124,7 @@ typedef hb_bool_t (*is_immutable_func_t) (void *obj); typedef struct { create_func_t create; create_func_t create_inert; + create_func_t get_empty; reference_func_t reference; destroy_func_t destroy; set_user_data_func_t set_user_data; @@ -137,6 +138,7 @@ typedef struct { { \ (create_func_t) create_##name, \ (create_func_t) create_##name##_inert, \ + (create_func_t) hb_##name##_get_empty, \ (reference_func_t) hb_##name##_reference, \ (destroy_func_t) hb_##name##_destroy, \ (set_user_data_func_t) hb_##name##_set_user_data, \ @@ -149,6 +151,7 @@ typedef struct { { \ (create_func_t) create_##name, \ (create_func_t) create_##name##_inert, \ + (create_func_t) hb_##name##_get_empty, \ (reference_func_t) hb_##name##_reference, \ (destroy_func_t) hb_##name##_destroy, \ (set_user_data_func_t) hb_##name##_set_user_data, \ @@ -305,6 +308,31 @@ test_object (void) g_assert_cmpuint (global_data, ==, 1000-2); } + { + data_t data[2] = {{MAGIC0, FALSE}, {MAGIC1, FALSE}}; + + g_test_message ("->get_empty()"); + obj = o->get_empty (); + g_assert (obj); + + g_assert (obj == o->reference (obj)); + o->destroy (obj); + + if (o->is_immutable) + g_assert (o->is_immutable (obj)); + + g_assert (!o->set_user_data (obj, &key[0], &data[0], free_up0)); + g_assert (!o->get_user_data (obj, &key[0])); + + o->destroy (obj); + o->destroy (obj); + o->destroy (obj); + o->destroy (obj); + o->destroy (obj); + + g_assert (!data[0].freed); + } + { data_t data[2] = {{MAGIC0, FALSE}, {MAGIC1, FALSE}}; @@ -312,6 +340,8 @@ test_object (void) obj = o->create_inert (); if (!obj) continue; + if (obj == o->get_empty ()) + continue; /* Tested already */ g_assert (obj == o->reference (obj)); o->destroy (obj);