aboutsummaryrefslogtreecommitdiffstats
path: root/epan/range.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2004-10-14 23:45:09 +0000
committerGuy Harris <guy@alum.mit.edu>2004-10-14 23:45:09 +0000
commitabd16b297f4750ea7f74137e87582c64153440f4 (patch)
tree446f0817e3a3c2648f647528b8cc7ac6216be892 /epan/range.c
parentaf061ccd603340e9e401acd423f623018eed373b (diff)
From Jeff Morriss: PREF_RANGE preference type, for ranges of integers.
svn path=/trunk/; revision=12300
Diffstat (limited to 'epan/range.c')
-rw-r--r--epan/range.c60
1 files changed, 59 insertions, 1 deletions
diff --git a/epan/range.c b/epan/range.c
index dde4d966cf..5da7d7028e 100644
--- a/epan/range.c
+++ b/epan/range.c
@@ -37,6 +37,7 @@
#include <epan/frame_data.h>
#include <epan/range.h>
+#include <stdio.h>
/* init the range struct */
void range_init(range_t *range) {
@@ -73,7 +74,8 @@ void range_init(range_t *range) {
void range_convert_str(range_t *range, const gchar *es, guint32 max_value)
{
- gchar EntryStr[255], OrgStr[255], value[255], p;
+ gchar EntryStr[MAXRANGESTRING], OrgStr[MAXRANGESTRING];
+ gchar value[MAXRANGESTRING], p;
guint i, j=0;
guint32 tmp, val;
gboolean hyphenseen;
@@ -241,6 +243,62 @@ gboolean value_is_in_range(range_t *range, guint32 val)
return(FALSE);
}
+/* This function returns TRUE if the two given range_t's are equal.
+ */
+gboolean ranges_are_equal(range_t *a, range_t *b)
+{
+ guint i;
+
+ if (a->nranges != b->nranges)
+ return FALSE;
+
+ for (i=0; i <= a->nranges; i++) {
+ if (a->ranges[i].low != b->ranges[i].low)
+ return FALSE;
+
+ if (a->ranges[i].high != b->ranges[i].high)
+ return FALSE;
+ }
+
+ return TRUE;
+
+}
+
+/* This function calls the provided callback function for each value in
+ * in the range.
+ */
+void
+range_foreach(range_t *range, void (*callback)(guint32 val))
+{
+ guint32 i, j;
+
+ for (i=0; i <= range->nranges; i++) {
+ for (j = range->ranges[i].low; j <= range->ranges[i].high; j++)
+ callback(j);
+ }
+}
+
+/* This function converts a range_t to a (caller-provided) string. */
+char *
+range_convert_range(range_t *range, char *string)
+{
+ guint32 i, k;
+
+ k = 0;
+ string[k] = '\0';
+
+ for (i=0; i <= range->nranges; i++) {
+ if (i != 0)
+ string[k++] = ',';
+
+ k += sprintf(&string[k], "%d-%d", range->ranges[i].low,
+ range->ranges[i].high);
+ }
+
+ return(string);
+
+}
+
#if 0
/* This is a debug function to check the range functionality */
static void value_is_in_range_check(range_t *range, guint32 val)