Commit 3d7fe675 by Geoff Simmons

set.matched() runs a binary search.

parent bcf99840
Pipeline #344 skipped
......@@ -768,7 +768,7 @@ VCL_BOOL
vmod_set_matched(VRT_CTX, struct vmod_re2_set *set, VCL_INT n)
{
struct task_set_match *task;
unsigned i;
int hi, lo = 0;
CHECK_OBJ_NOTNULL(ctx, VRT_CTX_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)
WS_Assert_Allocated(ctx->ws, task->matches,
task->nmatches * sizeof(int));
n--;
for (i = 0; i < task->nmatches && task->matches[i] < n; i++)
;
return task->matches[i] == n;
hi = task->nmatches;
do {
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
......
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