From a964411180fa9e0a7a219f830fa2f2ff3ef52ea3 Mon Sep 17 00:00:00 2001 From: Andrzej Zaborowski Date: Thu, 17 Dec 2009 18:22:05 +0100 Subject: [PATCH] Add utility for checking if CBS topic is in range --- src/smsutil.c | 22 +++++++++++++++++++++- src/smsutil.h | 2 ++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/smsutil.c b/src/smsutil.c index c27e9377..0323484d 100644 --- a/src/smsutil.c +++ b/src/smsutil.c @@ -3509,7 +3509,7 @@ out: return TRUE; } -static GSList *cbs_optimize_ranges(GSList *ranges) +GSList *cbs_optimize_ranges(GSList *ranges) { struct cbs_topic_range *range; unsigned char bitmap[125]; @@ -3666,3 +3666,23 @@ char *cbs_topic_ranges_to_string(GSList *ranges) return ret; } + +static gint cbs_topic_compare(gconstpointer a, gconstpointer b) +{ + const struct cbs_topic_range *range = a; + unsigned short topic = GPOINTER_TO_UINT(b); + + if (topic >= range->min && topic <= range->max) + return 0; + + return 1; +} + +gboolean cbs_topic_in_range(unsigned int topic, GSList *ranges) +{ + if (!ranges) + return FALSE; + + return g_slist_find_custom(ranges, GUINT_TO_POINTER(topic), + cbs_topic_compare) != NULL; +} diff --git a/src/smsutil.h b/src/smsutil.h index 858fc84c..10774dca 100644 --- a/src/smsutil.h +++ b/src/smsutil.h @@ -494,3 +494,5 @@ void cbs_assembly_location_changed(struct cbs_assembly *assembly, gboolean plmn, char *cbs_topic_ranges_to_string(GSList *ranges); GSList *cbs_extract_topic_ranges(const char *ranges); +GSList *cbs_optimize_ranges(GSList *ranges); +gboolean cbs_topic_in_range(unsigned int topic, GSList *ranges);