[telepathy-gabble/master] Add API for storing a set of capabilities
Will Thompson
will.thompson at collabora.co.uk
Tue Sep 8 04:09:59 PDT 2009
Currently the capabilities are just strings; this will probably change
to be something like a quark.
---
src/capabilities.c | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++
src/capabilities.h | 21 +++++++++++
2 files changed, 121 insertions(+), 0 deletions(-)
diff --git a/src/capabilities.c b/src/capabilities.c
index 29f5d3f..2f17d40 100644
--- a/src/capabilities.c
+++ b/src/capabilities.c
@@ -221,3 +221,103 @@ const CapabilityConversionData capabilities_conversions[] =
{ NULL, NULL, NULL}
};
+GabbleCapabilitySet *
+gabble_capability_set_new (void)
+{
+ return g_ptr_array_new ();
+}
+
+GabbleCapabilitySet *
+gabble_capability_set_copy (const GabbleCapabilitySet *caps)
+{
+ GabbleCapabilitySet *ret;
+
+ g_return_val_if_fail (caps != NULL, NULL);
+
+ ret = gabble_capability_set_new ();
+
+ gabble_capability_set_update (ret, caps);
+
+ return ret;
+}
+
+void
+gabble_capability_set_update (GabbleCapabilitySet *target,
+ const GabbleCapabilitySet *source)
+{
+ guint i;
+
+ g_return_if_fail (target != NULL);
+ g_return_if_fail (source != NULL);
+
+ for (i = 0; i < source->len; i++)
+ gabble_capability_set_add (target, g_ptr_array_index (source, i));
+}
+
+void
+gabble_capability_set_add (GabbleCapabilitySet *caps,
+ const gchar *cap)
+{
+ g_return_if_fail (caps != NULL);
+ g_return_if_fail (cap != NULL);
+
+ if (!gabble_capability_set_has (caps, cap))
+ g_ptr_array_add (caps, g_strdup (cap));
+}
+
+void
+gabble_capability_set_clear (GabbleCapabilitySet *caps)
+{
+ guint i;
+
+ g_return_if_fail (caps != NULL);
+
+ for (i = 0; i < caps->len; i++)
+ g_free (g_ptr_array_index (caps, i));
+
+ g_ptr_array_set_size (caps, 0);
+}
+
+void
+gabble_capability_set_free (GabbleCapabilitySet *caps)
+{
+ g_return_if_fail (caps != NULL);
+
+ gabble_capability_set_clear (caps);
+ g_ptr_array_free (caps, TRUE);
+}
+
+gboolean
+gabble_capability_set_has (const GabbleCapabilitySet *caps,
+ const gchar *cap)
+{
+ guint i;
+
+ g_return_val_if_fail (caps != NULL, FALSE);
+ g_return_val_if_fail (cap != NULL, FALSE);
+
+ for (i = 0; i < caps->len; i++)
+ if (!strcmp (g_ptr_array_index (caps, i), cap))
+ return TRUE;
+
+ return FALSE;
+}
+
+gboolean
+gabble_capability_set_equals (const GabbleCapabilitySet *a,
+ const GabbleCapabilitySet *b)
+{
+ guint i;
+
+ g_return_val_if_fail (a != NULL, FALSE);
+ g_return_val_if_fail (b != NULL, FALSE);
+
+ if (a->len != b->len)
+ return FALSE;
+
+ for (i = 0; i < a->len; i++)
+ if (!gabble_capability_set_has (b, g_ptr_array_index (a, i)))
+ return FALSE;
+
+ return TRUE;
+}
diff --git a/src/capabilities.h b/src/capabilities.h
index 5794133..37289eb 100644
--- a/src/capabilities.h
+++ b/src/capabilities.h
@@ -50,6 +50,27 @@ struct _Feature
GabblePresenceCapabilities caps;
};
+/**
+ * GabbleCapabilitySet:
+ *
+ * A GPtrArray of gchar *, treated as a set.
+ */
+typedef GPtrArray GabbleCapabilitySet;
+
+GabbleCapabilitySet *gabble_capability_set_new (void);
+GabbleCapabilitySet *gabble_capability_set_copy (
+ const GabbleCapabilitySet *caps);
+void gabble_capability_set_update (GabbleCapabilitySet *target,
+ const GabbleCapabilitySet *source);
+void gabble_capability_set_add (GabbleCapabilitySet *caps,
+ const gchar *cap);
+gboolean gabble_capability_set_has (const GabbleCapabilitySet *caps,
+ const gchar *cap);
+gboolean gabble_capability_set_equals (const GabbleCapabilitySet *a,
+ const GabbleCapabilitySet *b);
+void gabble_capability_set_clear (GabbleCapabilitySet *caps);
+void gabble_capability_set_free (GabbleCapabilitySet *caps);
+
/*
* capabilities_get_features
*
--
1.5.6.5
More information about the telepathy-commits
mailing list