Commit 71846007 authored by octal's avatar octal

Router: Using a static NoMatch variable instead of a horrible macro in Route::match

parent 9ae0f5f0
......@@ -172,28 +172,27 @@ Route::match(const Http::Request& req) const
std::tuple<bool, std::vector<TypedParam>, std::vector<TypedParam>>
Route::match(const std::string& req) const
{
#define UNMATCH() std::make_tuple(false, std::vector<TypedParam>(), std::vector<TypedParam>())
static const auto NoMatch = std::make_tuple(false, std::vector<TypedParam>(), std::vector<TypedParam>());
auto reqFragments = Fragment::fromUrl(req);
if (reqFragments.size() > fragments_.size())
return UNMATCH();
return NoMatch;
std::vector<TypedParam> params;
std::vector<TypedParam> splats;
for (std::vector<Fragment>::size_type i = 0; i < fragments_.size(); ++i) {
const auto& fragment = fragments_[i];
if (i >= reqFragments.size()) {
if (fragment.isOptional())
continue;
return UNMATCH();
return NoMatch;
}
const auto& reqFragment = reqFragments[i];
if (!fragment.match(reqFragment))
return UNMATCH();
return NoMatch;
if (fragment.isParameter()) {
params.push_back(TypedParam(fragment.value(), reqFragment.value()));
......@@ -203,8 +202,6 @@ Route::match(const std::string& req) const
}
#undef UNMATCH
return make_tuple(true, std::move(params), std::move(splats));
}
......
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