[telepathy-gabble/master] Add gabble_capability_set_at_least () and GabbleCapabilitySetPredicate typedef
Simon McVittie
simon.mcvittie at collabora.co.uk
Tue Sep 8 04:10:03 PDT 2009
gabble_capability_set_at_least (A, B) == (A ⊇ B).
GabbleCapabilitySetPredicate is a generic test of whether a cap set meets
some parameterized criterion; g_c_s_has and g_c_s_at_least are suitable,
so add macros that cast them to GabbleCapabilitySetPredicate for
convenience.
---
src/capabilities.c | 24 ++++++++++++++++++++++++
src/capabilities.h | 12 ++++++++++++
2 files changed, 36 insertions(+), 0 deletions(-)
diff --git a/src/capabilities.c b/src/capabilities.c
index 52b7848..35c4dcc 100644
--- a/src/capabilities.c
+++ b/src/capabilities.c
@@ -379,6 +379,7 @@ gabble_capability_set_free (GabbleCapabilitySet *caps)
g_slice_free (GabbleCapabilitySet, caps);
}
+/* By design, this function can be used as a GabbleCapabilitySetPredicate */
gboolean
gabble_capability_set_has (const GabbleCapabilitySet *caps,
const gchar *cap)
@@ -399,6 +400,29 @@ gabble_capability_set_has (const GabbleCapabilitySet *caps,
return tp_handle_set_is_member (caps->handles, handle);
}
+/* By design, this function can be used as a GabbleCapabilitySetPredicate */
+gboolean
+gabble_capability_set_at_least (const GabbleCapabilitySet *caps,
+ const GabbleCapabilitySet *query)
+{
+ TpIntSetIter iter;
+
+ g_return_val_if_fail (caps != NULL, FALSE);
+ g_return_val_if_fail (query != NULL, FALSE);
+
+ tp_intset_iter_init (&iter, tp_handle_set_peek (query->handles));
+
+ while (tp_intset_iter_next (&iter))
+ {
+ if (!tp_handle_set_is_member (caps->handles, iter.element))
+ {
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
gboolean
gabble_capability_set_equals (const GabbleCapabilitySet *a,
const GabbleCapabilitySet *b)
diff --git a/src/capabilities.h b/src/capabilities.h
index 491eba4..74972a8 100644
--- a/src/capabilities.h
+++ b/src/capabilities.h
@@ -60,6 +60,8 @@ 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_at_least (const GabbleCapabilitySet *caps,
+ const GabbleCapabilitySet *query);
gboolean gabble_capability_set_equals (const GabbleCapabilitySet *a,
const GabbleCapabilitySet *b);
void gabble_capability_set_clear (GabbleCapabilitySet *caps);
@@ -67,6 +69,16 @@ void gabble_capability_set_free (GabbleCapabilitySet *caps);
void gabble_capability_set_foreach (const GabbleCapabilitySet *caps,
GFunc func, gpointer user_data);
+/* A predicate used by the presence code to select suitable resources */
+typedef gboolean (*GabbleCapabilitySetPredicate) (
+ const GabbleCapabilitySet *set, gpointer user_data);
+/* These two functions are compatible with GabbleCapabilitySetPredicate;
+ * pass in the desired capabilities as the user_data */
+#define gabble_capability_set_predicate_has \
+ ((GabbleCapabilitySetPredicate) gabble_capability_set_has)
+#define gabble_capability_set_predicate_at_least \
+ ((GabbleCapabilitySetPredicate) gabble_capability_set_at_least)
+
/* XEP-0115 version 1.3:
*
* "The names of the feature bundles MUST NOT be used for semantic purposes:
--
1.5.6.5
More information about the telepathy-commits
mailing list