}
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)
{
return hb_object_reference (ffuncs);
(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)
}
hb_font_t *
+hb_font_get_empty (void)
+{
+ return &_hb_font_nil;
+}
+
+hb_font_t *
hb_font_reference (hb_font_t *font)
{
return hb_object_reference (font);
hb_destroy_func_t destroy);
hb_face_t *
+hb_face_get_empty (void);
+
+hb_face_t *
hb_face_reference (hb_face_t *face);
void
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);
void
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);
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 *
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 *
static void *
create_font_inert (void)
{
- return hb_font_create (create_face_inert ());
+ return hb_font_create (hb_face_get_empty ());
}
static void *
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;
{ \
(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, \
{ \
(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, \
{
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}};
+
g_test_message ("->create_inert()");
obj = o->create_inert ();
if (!obj)
continue;
+ if (obj == o->get_empty ())
+ continue; /* Tested already */
g_assert (obj == o->reference (obj));
o->destroy (obj);