summaryrefslogtreecommitdiffstats
path: root/src/segtree.c
diff options
context:
space:
mode:
authorPatrick McHardy <kaber@trash.net>2014-09-24 13:49:04 +0200
committerPatrick McHardy <kaber@trash.net>2014-09-24 13:49:04 +0200
commitd68824c96f2e8cee14b6a505c91fd379b9aa3088 (patch)
treeee3ea46ca708c99d93149a17860d857b7123a53b /src/segtree.c
parent01b27b6d961d548c25f0fc185fd05fc3d2380080 (diff)
expr: make range_low()/range_high() usable outside of segtree
Their functionality is also needed for set descriptions, move the functions to expressions.c and give them a more suitable name for global functions. Signed-off-by: Patrick McHardy <kaber@trash.net>
Diffstat (limited to 'src/segtree.c')
-rw-r--r--src/segtree.c42
1 files changed, 2 insertions, 40 deletions
diff --git a/src/segtree.c b/src/segtree.c
index 1785f640..753d8b84 100644
--- a/src/segtree.c
+++ b/src/segtree.c
@@ -256,44 +256,6 @@ static void ei_insert(struct seg_tree *tree, struct elementary_interval *new)
mpz_clear(p);
}
-static void range_low(mpz_t rop, struct expr *expr)
-{
- switch (expr->ops->type) {
- case EXPR_VALUE:
- return mpz_set(rop, expr->value);
- case EXPR_PREFIX:
- return range_low(rop, expr->prefix);
- case EXPR_RANGE:
- return range_low(rop, expr->left);
- case EXPR_MAPPING:
- return range_low(rop, expr->left);
- default:
- BUG("invalid range expression type %s\n", expr->ops->name);
- }
-}
-
-static void range_high(mpz_t rop, const struct expr *expr)
-{
- mpz_t tmp;
-
- switch (expr->ops->type) {
- case EXPR_VALUE:
- return mpz_set(rop, expr->value);
- case EXPR_PREFIX:
- range_low(rop, expr->prefix);
- mpz_init_bitmask(tmp, expr->len - expr->prefix_len);
- mpz_add(rop, rop, tmp);
- mpz_clear(tmp);
- return;
- case EXPR_RANGE:
- return range_high(rop, expr->right);
- case EXPR_MAPPING:
- return range_high(rop, expr->left);
- default:
- BUG("invalid range expression type %s\n", expr->ops->name);
- }
-}
-
/*
* Sort intervals according to their priority, which is defined inversely to
* their size.
@@ -353,8 +315,8 @@ static int set_to_segtree(struct list_head *msgs, struct expr *set,
*/
n = 0;
list_for_each_entry_safe(i, next, &set->expressions, list) {
- range_low(low, i);
- range_high(high, i);
+ range_expr_value_low(low, i);
+ range_expr_value_high(high, i);
ei = ei_alloc(low, high, i, 0);
intervals[n++] = ei;