[next] telepathy-glib: add tp_intset_to_variant()
Guillaume Desmottes
gdesmott at kemper.freedesktop.org
Fri May 16 06:04:55 PDT 2014
Module: telepathy-glib
Branch: next
Commit: 62b0a8cb7ff72d2a5a76601424ab56a0c0118865
URL: http://cgit.freedesktop.org/telepathy/telepathy-glib/commit/?id=62b0a8cb7ff72d2a5a76601424ab56a0c0118865
Author: Guillaume Desmottes <guillaume.desmottes at collabora.co.uk>
Date: Thu May 15 09:54:07 2014 +0200
add tp_intset_to_variant()
https://bugs.freedesktop.org/show_bug.cgi?id=77773
---
.../telepathy-glib/telepathy-glib-sections.txt | 1 +
telepathy-glib/intset.c | 29 ++++++++++++++++++++
telepathy-glib/intset.h | 2 ++
tests/intset.c | 14 ++++++++++
4 files changed, 46 insertions(+)
diff --git a/docs/reference/telepathy-glib/telepathy-glib-sections.txt b/docs/reference/telepathy-glib/telepathy-glib-sections.txt
index d7f38e2..3ffca48 100644
--- a/docs/reference/telepathy-glib/telepathy-glib-sections.txt
+++ b/docs/reference/telepathy-glib/telepathy-glib-sections.txt
@@ -1783,6 +1783,7 @@ tp_intset_is_member
tp_intset_foreach
tp_intset_to_array
tp_intset_from_array
+tp_intset_to_variant
tp_intset_is_empty
tp_intset_size
tp_intset_is_equal
diff --git a/telepathy-glib/intset.c b/telepathy-glib/intset.c
index 363cc0e..7b3c58b 100644
--- a/telepathy-glib/intset.c
+++ b/telepathy-glib/intset.c
@@ -355,6 +355,12 @@ tp_intset_to_array (const TpIntset *set)
return array;
}
+static void
+addint_builder (guint i, gpointer data)
+{
+ GVariantBuilder *builder = (GVariantBuilder *) data;
+ g_variant_builder_add (builder, "u", i);
+}
/**
* tp_intset_from_array:
@@ -383,6 +389,29 @@ tp_intset_from_array (const GArray *array)
return set;
}
+/**
+ * tp_intset_to_variant:
+ * @set: set to convert
+ *
+ * <!--Returns: says it all-->
+ *
+ * Returns: (transfer none): a new floating #GVariant of type
+ * 'au' (array of uint32) containing the same integers as @set.
+ */
+GVariant *
+tp_intset_to_variant (const TpIntset *set)
+{
+ GVariantBuilder builder;
+
+ g_return_val_if_fail (set != NULL, NULL);
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("au"));
+
+ tp_intset_foreach (set, addint_builder, &builder);
+
+ return g_variant_builder_end (&builder);
+}
+
/* these magic numbers would need adjusting for 64-bit storage */
G_STATIC_ASSERT (BITFIELD_BITS == 32);
diff --git a/telepathy-glib/intset.h b/telepathy-glib/intset.h
index a3038b7..496bcfb 100644
--- a/telepathy-glib/intset.h
+++ b/telepathy-glib/intset.h
@@ -56,6 +56,8 @@ void tp_intset_foreach (const TpIntset *set, TpIntFunc func,
GArray *tp_intset_to_array (const TpIntset *set) G_GNUC_WARN_UNUSED_RESULT;
TpIntset *tp_intset_from_array (const GArray *array) G_GNUC_WARN_UNUSED_RESULT;
+GVariant *tp_intset_to_variant (const TpIntset *set) G_GNUC_WARN_UNUSED_RESULT;
+
gboolean tp_intset_is_empty (const TpIntset *set) G_GNUC_WARN_UNUSED_RESULT;
guint tp_intset_size (const TpIntset *set) G_GNUC_WARN_UNUSED_RESULT;
diff --git a/tests/intset.c b/tests/intset.c
index 5f9e69a..3695f1e 100644
--- a/tests/intset.c
+++ b/tests/intset.c
@@ -200,6 +200,20 @@ test (Fixture *f,
tmp = NULL;
}
+ {
+ GVariant *v;
+
+ v = tp_intset_to_variant (a);
+ g_variant_ref_sink (v);
+ g_assert (g_variant_is_of_type (v, G_VARIANT_TYPE ("au")));
+ g_variant_unref (v);
+
+ v = tp_intset_to_variant (b);
+ g_variant_ref_sink (v);
+ g_assert (g_variant_is_of_type (v, G_VARIANT_TYPE ("au")));
+ g_variant_unref (v);
+ }
+
value = tp_g_value_slice_new_take_boxed (TP_TYPE_INTSET, a);
copy = g_value_dup_boxed (value);
More information about the telepathy-commits
mailing list