aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mm-private-boxed-types.c84
-rw-r--r--src/mm-private-boxed-types.h8
2 files changed, 92 insertions, 0 deletions
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 ())