diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/smsutil.c | 22 | ||||
-rw-r--r-- | src/smsutil.h | 2 |
2 files changed, 23 insertions, 1 deletions
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); |