From 1f3e67775c608ce49c44cd4b67bcd7ba34840b76 Mon Sep 17 00:00:00 2001 From: Aleksander Morgado Date: Tue, 14 Feb 2012 14:04:46 +0100 Subject: core: new private boxed types for string and uint16 pairs --- src/mm-private-boxed-types.c | 84 ++++++++++++++++++++++++++++++++++++++++++++ src/mm-private-boxed-types.h | 8 +++++ 2 files changed, 92 insertions(+) (limited to 'src') diff --git a/src/mm-private-boxed-types.c b/src/mm-private-boxed-types.c index 1f5d6a8b..a7b166ef 100644 --- a/src/mm-private-boxed-types.c +++ b/src/mm-private-boxed-types.c @@ -51,6 +51,90 @@ mm_uint16_array_get_type (void) return g_define_type_id__volatile; } +static mm_uint16_pair * +uint16_pair_array_copy (mm_uint16_pair *array) +{ + mm_uint16_pair *dup; + guint i; + + if (!array) + return NULL; + + /* Get 0-terminated array size */ + for (i = 0; array[i].l; i++); + + dup = g_new (mm_uint16_pair, i + 1); + memcpy (dup, array, i * sizeof (mm_uint16_pair)); + dup[i].l = 0; dup[i].r = 0; + return dup; +} + +GType +mm_uint16_pair_array_get_type (void) +{ + static volatile gsize g_define_type_id__volatile = 0; + + if (g_once_init_enter (&g_define_type_id__volatile)) { + GType g_define_type_id = + g_boxed_type_register_static (g_intern_static_string ("MMUint16PairArray"), + (GBoxedCopyFunc) uint16_pair_array_copy, + (GBoxedFreeFunc) g_free); + + g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); + } + + return g_define_type_id__volatile; +} + +static void +str_pair_array_free (mm_str_pair *array) +{ + guint i; + + for (i = 0; array[i].l; i++) { + g_free (array[i].l); + g_free (array[i].r); + } + g_free (array); +} + +static mm_str_pair * +str_pair_array_copy (mm_str_pair *array) +{ + mm_str_pair *dup; + guint i; + + if (!array) + return NULL; + + /* Get NULL-terminated array size */ + for (i = 0; array[i].l; i++); + + dup = g_new (mm_str_pair, i + 1); + for (i = 0; array[i].l; i++) { + dup[i].l = g_strdup (array[i].l); + dup[i].r = g_strdup (array[i].r); + } + dup[i].l = NULL; dup[i].r = NULL; + return dup; +} + +GType +mm_str_pair_array_get_type (void) +{ + static volatile gsize g_define_type_id__volatile = 0; + + if (g_once_init_enter (&g_define_type_id__volatile)) { + GType g_define_type_id = + g_boxed_type_register_static (g_intern_static_string ("MMStrPairArray"), + (GBoxedCopyFunc) str_pair_array_copy, + (GBoxedFreeFunc) str_pair_array_free); + + g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); + } + + return g_define_type_id__volatile; +} static gpointer * pointer_array_copy (gpointer *array) diff --git a/src/mm-private-boxed-types.h b/src/mm-private-boxed-types.h index 661ce991..dba8d359 100644 --- a/src/mm-private-boxed-types.h +++ b/src/mm-private-boxed-types.h @@ -23,6 +23,14 @@ G_BEGIN_DECLS GType mm_uint16_array_get_type (void) G_GNUC_CONST; #define MM_TYPE_UINT16_ARRAY (mm_uint16_array_get_type ()) +typedef struct { guint16 l; guint16 r; } mm_uint16_pair; +GType mm_uint16_pair_array_get_type (void) G_GNUC_CONST; +#define MM_TYPE_UINT16_PAIR_ARRAY (mm_uint16_pair_array_get_type ()) + +typedef struct { gchar *l; gchar *r; } mm_str_pair; +GType mm_str_pair_array_get_type (void) G_GNUC_CONST; +#define MM_TYPE_STR_PAIR_ARRAY (mm_str_pair_array_get_type ()) + GType mm_pointer_array_get_type (void) G_GNUC_CONST; #define MM_TYPE_POINTER_ARRAY (mm_pointer_array_get_type ()) -- cgit v1.2.3-70-g09d2