Commit 2e4bcc3d authored by Geoff Simmons's avatar Geoff Simmons

set.matched() runs a binary search.

parent b20a6ee2
...@@ -768,7 +768,7 @@ VCL_BOOL ...@@ -768,7 +768,7 @@ VCL_BOOL
vmod_set_matched(VRT_CTX, struct vmod_re2_set *set, VCL_INT n) vmod_set_matched(VRT_CTX, struct vmod_re2_set *set, VCL_INT n)
{ {
struct task_set_match *task; struct task_set_match *task;
unsigned i; int hi, lo = 0;
CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC); CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
CHECK_OBJ_NOTNULL(set, VMOD_RE2_SET_MAGIC); CHECK_OBJ_NOTNULL(set, VMOD_RE2_SET_MAGIC);
...@@ -789,9 +789,18 @@ vmod_set_matched(VRT_CTX, struct vmod_re2_set *set, VCL_INT n) ...@@ -789,9 +789,18 @@ vmod_set_matched(VRT_CTX, struct vmod_re2_set *set, VCL_INT n)
WS_Assert_Allocated(ctx->ws, task->matches, WS_Assert_Allocated(ctx->ws, task->matches,
task->nmatches * sizeof(int)); task->nmatches * sizeof(int));
n--; n--;
for (i = 0; i < task->nmatches && task->matches[i] < n; i++) hi = task->nmatches;
; do {
return task->matches[i] == n; int m = lo + (hi - lo) / 2;
if (task->matches[m] == n)
return 1;
if (task->matches[m] < n)
lo = m + 1;
else
hi = m - 1;
} while (lo <= hi);
return 0;
} }
VCL_INT VCL_INT
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment