summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhil Sutter <phil@nwl.cc>2020-04-30 13:45:40 +0200
committerPhil Sutter <phil@nwl.cc>2020-05-04 16:21:16 +0200
commita2eedcc89d2ed40411c26d53579300c4f1ccb83d (patch)
tree0cdcc707e89cb59b1ba7a80e6d09aecc0d515325
parent60ba9c22fecc0ca9bb2a61f6ad39bceed1aee38f (diff)
segtree: Use expr_clone in get_set_interval_*()
Both functions perform interval set lookups with either start and end or only start values as input. Interestingly, in practice they either see values which are not contained or which match an existing range exactly. Make use of the above and just return a clone of the matching entry instead of creating a new one based on input data. Signed-off-by: Phil Sutter <phil@nwl.cc>
-rw-r--r--src/segtree.c8
1 files changed, 2 insertions, 6 deletions
diff --git a/src/segtree.c b/src/segtree.c
index 002ee41a..f81a66e1 100644
--- a/src/segtree.c
+++ b/src/segtree.c
@@ -708,9 +708,7 @@ static struct expr *get_set_interval_find(const struct table *table,
range_expr_value_high(high, i);
if (mpz_cmp(left->key->value, low) >= 0 &&
mpz_cmp(right->key->value, high) <= 0) {
- range = range_expr_alloc(&internal_location,
- expr_clone(left->key),
- expr_clone(right->key));
+ range = expr_clone(i->key);
goto out;
}
break;
@@ -742,9 +740,7 @@ static struct expr *get_set_interval_end(const struct table *table,
case EXPR_RANGE:
range_expr_value_low(low, i);
if (mpz_cmp(low, left->key->value) == 0) {
- range = range_expr_alloc(&internal_location,
- expr_clone(left->key),
- expr_clone(i->key->right));
+ range = expr_clone(i->key);
goto out;
}
break;