Simplified cycles in nxt_http_route_rule().

This commit is contained in:
Valentin Bartenev
2019-04-12 17:44:54 +03:00
parent 8339b15158
commit f0cc14d394

View File

@@ -539,20 +539,18 @@ nxt_http_route_pattern_copy(nxt_mp_t *mp, nxt_str_t *test,
void void
nxt_http_routes_resolve(nxt_task_t *task, nxt_router_temp_conf_t *tmcf) nxt_http_routes_resolve(nxt_task_t *task, nxt_router_temp_conf_t *tmcf)
{ {
nxt_uint_t items; nxt_http_route_t **route, **end;
nxt_http_route_t **route;
nxt_http_routes_t *routes; nxt_http_routes_t *routes;
routes = tmcf->router_conf->routes; routes = tmcf->router_conf->routes;
if (routes != NULL) { if (routes != NULL) {
items = routes->items;
route = &routes->route[0]; route = &routes->route[0];
end = route + routes->items;
while (items != 0) { while (route < end) {
nxt_http_route_resolve(task, tmcf, *route); nxt_http_route_resolve(task, tmcf, *route);
route++; route++;
items--;
} }
} }
} }
@@ -562,17 +560,15 @@ static void
nxt_http_route_resolve(nxt_task_t *task, nxt_router_temp_conf_t *tmcf, nxt_http_route_resolve(nxt_task_t *task, nxt_router_temp_conf_t *tmcf,
nxt_http_route_t *route) nxt_http_route_t *route)
{ {
nxt_uint_t items; nxt_http_route_match_t **match, **end;
nxt_http_route_match_t **match;
items = route->items;
match = &route->match[0]; match = &route->match[0];
end = match + route->items;
while (items != 0) { while (match < end) {
nxt_http_pass_resolve(task, tmcf, &(*match)->pass); nxt_http_pass_resolve(task, tmcf, &(*match)->pass);
match++; match++;
items--;
} }
} }
@@ -615,11 +611,10 @@ nxt_http_pass_resolve(nxt_task_t *task, nxt_router_temp_conf_t *tmcf,
static nxt_http_route_t * static nxt_http_route_t *
nxt_http_route_find(nxt_http_routes_t *routes, nxt_str_t *name) nxt_http_route_find(nxt_http_routes_t *routes, nxt_str_t *name)
{ {
nxt_uint_t items; nxt_http_route_t **route, **end;
nxt_http_route_t **route;
items = routes->items;
route = &routes->route[0]; route = &routes->route[0];
end = route + routes->items;
do { do {
if (nxt_strstr_eq(&(*route)->name, name)) { if (nxt_strstr_eq(&(*route)->name, name)) {
@@ -627,9 +622,8 @@ nxt_http_route_find(nxt_http_routes_t *routes, nxt_str_t *name)
} }
route++; route++;
items--;
} while (items != 0); } while (route < end);
return NULL; return NULL;
} }
@@ -681,20 +675,18 @@ nxt_http_pass_application(nxt_task_t *task, nxt_router_temp_conf_t *tmcf,
void void
nxt_http_routes_cleanup(nxt_task_t *task, nxt_http_routes_t *routes) nxt_http_routes_cleanup(nxt_task_t *task, nxt_http_routes_t *routes)
{ {
nxt_uint_t items; nxt_http_route_t **route, **end;
nxt_http_route_t **route;
if (routes != NULL) { if (routes != NULL) {
items = routes->items;
route = &routes->route[0]; route = &routes->route[0];
end = route + routes->items;
do { do {
nxt_http_route_cleanup(task, *route); nxt_http_route_cleanup(task, *route);
route++; route++;
items--;
} while (items != 0); } while (route < end);
} }
} }
@@ -702,19 +694,17 @@ nxt_http_routes_cleanup(nxt_task_t *task, nxt_http_routes_t *routes)
static void static void
nxt_http_route_cleanup(nxt_task_t *task, nxt_http_route_t *route) nxt_http_route_cleanup(nxt_task_t *task, nxt_http_route_t *route)
{ {
nxt_uint_t items; nxt_http_route_match_t **match, **end;
nxt_http_route_match_t **match;
items = route->items;
match = &route->match[0]; match = &route->match[0];
end = match + route->items;
do { do {
nxt_http_pass_cleanup(task, &(*match)->pass); nxt_http_pass_cleanup(task, &(*match)->pass);
match++; match++;
items--;
} while (items != 0); } while (match < end);
} }
@@ -731,23 +721,21 @@ static nxt_http_pass_t *
nxt_http_route_pass(nxt_task_t *task, nxt_http_request_t *r, nxt_http_route_pass(nxt_task_t *task, nxt_http_request_t *r,
nxt_http_pass_t *start) nxt_http_pass_t *start)
{ {
nxt_uint_t items;
nxt_http_pass_t *pass; nxt_http_pass_t *pass;
nxt_http_route_t *route; nxt_http_route_t *route;
nxt_http_route_match_t **match; nxt_http_route_match_t **match, **end;
route = start->u.route; route = start->u.route;
items = route->items;
match = &route->match[0]; match = &route->match[0];
end = match + route->items;
while (items != 0) { while (match < end) {
pass = nxt_http_route_match(r, *match); pass = nxt_http_route_match(r, *match);
if (pass != NULL) { if (pass != NULL) {
return pass; return pass;
} }
match++; match++;
items--;
} }
nxt_http_request_error(task, r, NXT_HTTP_NOT_FOUND); nxt_http_request_error(task, r, NXT_HTTP_NOT_FOUND);
@@ -759,19 +747,17 @@ nxt_http_route_pass(nxt_task_t *task, nxt_http_request_t *r,
static nxt_http_pass_t * static nxt_http_pass_t *
nxt_http_route_match(nxt_http_request_t *r, nxt_http_route_match_t *match) nxt_http_route_match(nxt_http_request_t *r, nxt_http_route_match_t *match)
{ {
nxt_uint_t items; nxt_http_route_rule_t **rule, **end;
nxt_http_route_rule_t **rule;
rule = &match->rule[0]; rule = &match->rule[0];
items = match->items; end = rule + match->items;
while (items != 0) { while (rule < end) {
if (!nxt_http_route_rule(r, *rule)) { if (!nxt_http_route_rule(r, *rule)) {
return NULL; return NULL;
} }
rule++; rule++;
items--;
} }
return &match->pass; return &match->pass;
@@ -785,10 +771,9 @@ nxt_http_route_rule(nxt_http_request_t *r, nxt_http_route_rule_t *rule)
u_char *start; u_char *start;
size_t length; size_t length;
nxt_str_t *s; nxt_str_t *s;
nxt_uint_t items;
nxt_bool_t ret; nxt_bool_t ret;
nxt_http_field_t *f; nxt_http_field_t *f;
nxt_http_route_pattern_t *pattern; nxt_http_route_pattern_t *pattern, *end;
p = nxt_pointer_to(r, rule->offset); p = nxt_pointer_to(r, rule->offset);
@@ -834,8 +819,8 @@ nxt_http_route_rule(nxt_http_request_t *r, nxt_http_route_rule_t *rule)
} }
} }
items = rule->items;
pattern = &rule->pattern[0]; pattern = &rule->pattern[0];
end = pattern + rule->items;
do { do {
ret = nxt_http_route_pattern(r, pattern, start, length); ret = nxt_http_route_pattern(r, pattern, start, length);
@@ -847,9 +832,8 @@ nxt_http_route_rule(nxt_http_request_t *r, nxt_http_route_rule_t *rule)
} }
pattern++; pattern++;
items--;
} while (items != 0); } while (pattern < end);
return ret; return ret;
} }