Require a BaseParameters type at compile time via enable_if

This commit is contained in:
Daniel J. Hofmann
2016-02-17 14:26:22 -08:00
committed by Patrick Niklaus
parent c75b497b2e
commit 3c58eaf49f
2 changed files with 46 additions and 37 deletions
+22 -20
View File
@@ -3,6 +3,8 @@
#include "server/api/route_parameters_grammar.hpp"
#include "server/api/table_parameter_grammar.hpp"
#include <type_traits>
namespace osrm
{
namespace server
@@ -10,37 +12,37 @@ namespace server
namespace api
{
template<>
boost::optional<engine::api::RouteParameters> parseParameters(std::string::iterator& iter, std::string::iterator end)
namespace detail
{
RouteParametersGrammar grammar;
template <typename ParameterT, typename GrammarT>
boost::optional<ParameterT> parseParameters(std::string::iterator &iter, std::string::iterator end)
{
GrammarT grammar;
const auto result = boost::spirit::qi::parse(iter, end, grammar);
boost::optional<engine::api::RouteParameters> parameters;
boost::optional<ParameterT> parameters;
if (result && iter == end)
{
parameters = std::move(grammar.parameters);
}
return parameters;
}
} // ns detail
template<>
boost::optional<engine::api::TableParameters> parseParameters(std::string::iterator& iter, std::string::iterator end)
template <>
boost::optional<engine::api::RouteParameters> parseParameters(std::string::iterator &iter,
std::string::iterator end)
{
TableParametersGrammar grammar;
const auto result = boost::spirit::qi::parse(iter, end, grammar);
boost::optional<engine::api::TableParameters> parameters;
if (result && iter == end)
{
parameters = std::move(grammar.parameters);
}
return parameters;
return detail::parseParameters<engine::api::RouteParameters, RouteParametersGrammar>(iter, end);
}
}
}
template <>
boost::optional<engine::api::TableParameters> parseParameters(std::string::iterator &iter,
std::string::iterator end)
{
return detail::parseParameters<engine::api::TableParameters, TableParametersGrammar>(iter, end);
}
} // ns api
} // ns server
} // ns osrm