Do not modify the end iterator for parameter parsing, too

This commit is contained in:
Daniel J. Hofmann 2016-04-01 14:30:22 +02:00 committed by Patrick Niklaus
parent 6f0b6a8158
commit d3dbca374d
2 changed files with 8 additions and 8 deletions

View File

@ -30,7 +30,7 @@ using is_parameter_t =
// Starts parsing and iter and modifies it until iter == end or parsing failed // Starts parsing and iter and modifies it until iter == end or parsing failed
template <typename ParameterT, template <typename ParameterT,
typename std::enable_if<detail::is_parameter_t<ParameterT>::value, int>::type = 0> typename std::enable_if<detail::is_parameter_t<ParameterT>::value, int>::type = 0>
boost::optional<ParameterT> parseParameters(std::string::iterator &iter, std::string::iterator end); boost::optional<ParameterT> parseParameters(std::string::iterator &iter, const std::string::iterator end);
// Copy on purpose because we need mutability // Copy on purpose because we need mutability
template <typename ParameterT, template <typename ParameterT,

View File

@ -25,7 +25,7 @@ template <typename ParameterT,
typename GrammarT, typename GrammarT,
typename std::enable_if<detail::is_parameter_t<ParameterT>::value, int>::type = 0, typename std::enable_if<detail::is_parameter_t<ParameterT>::value, int>::type = 0,
typename std::enable_if<detail::is_grammar_t<GrammarT>::value, int>::type = 0> typename std::enable_if<detail::is_grammar_t<GrammarT>::value, int>::type = 0>
boost::optional<ParameterT> parseParameters(std::string::iterator &iter, std::string::iterator end) boost::optional<ParameterT> parseParameters(std::string::iterator &iter, const std::string::iterator end)
{ {
GrammarT grammar; GrammarT grammar;
const auto result = boost::spirit::qi::parse(iter, end, grammar); const auto result = boost::spirit::qi::parse(iter, end, grammar);
@ -40,21 +40,21 @@ boost::optional<ParameterT> parseParameters(std::string::iterator &iter, std::st
template <> template <>
boost::optional<engine::api::RouteParameters> parseParameters(std::string::iterator &iter, boost::optional<engine::api::RouteParameters> parseParameters(std::string::iterator &iter,
std::string::iterator end) const std::string::iterator end)
{ {
return detail::parseParameters<engine::api::RouteParameters, RouteParametersGrammar>(iter, end); return detail::parseParameters<engine::api::RouteParameters, RouteParametersGrammar>(iter, end);
} }
template <> template <>
boost::optional<engine::api::TableParameters> parseParameters(std::string::iterator &iter, boost::optional<engine::api::TableParameters> parseParameters(std::string::iterator &iter,
std::string::iterator end) const std::string::iterator end)
{ {
return detail::parseParameters<engine::api::TableParameters, TableParametersGrammar>(iter, end); return detail::parseParameters<engine::api::TableParameters, TableParametersGrammar>(iter, end);
} }
template <> template <>
boost::optional<engine::api::NearestParameters> parseParameters(std::string::iterator &iter, boost::optional<engine::api::NearestParameters> parseParameters(std::string::iterator &iter,
std::string::iterator end) const std::string::iterator end)
{ {
return detail::parseParameters<engine::api::NearestParameters, NearestParametersGrammar>(iter, return detail::parseParameters<engine::api::NearestParameters, NearestParametersGrammar>(iter,
end); end);
@ -62,21 +62,21 @@ boost::optional<engine::api::NearestParameters> parseParameters(std::string::ite
template <> template <>
boost::optional<engine::api::TripParameters> parseParameters(std::string::iterator &iter, boost::optional<engine::api::TripParameters> parseParameters(std::string::iterator &iter,
std::string::iterator end) const std::string::iterator end)
{ {
return detail::parseParameters<engine::api::TripParameters, TripParametersGrammar>(iter, end); return detail::parseParameters<engine::api::TripParameters, TripParametersGrammar>(iter, end);
} }
template <> template <>
boost::optional<engine::api::MatchParameters> parseParameters(std::string::iterator &iter, boost::optional<engine::api::MatchParameters> parseParameters(std::string::iterator &iter,
std::string::iterator end) const std::string::iterator end)
{ {
return detail::parseParameters<engine::api::MatchParameters, MatchParametersGrammar>(iter, end); return detail::parseParameters<engine::api::MatchParameters, MatchParametersGrammar>(iter, end);
} }
template <> template <>
boost::optional<engine::api::TileParameters> parseParameters(std::string::iterator &iter, boost::optional<engine::api::TileParameters> parseParameters(std::string::iterator &iter,
std::string::iterator end) const std::string::iterator end)
{ {
return detail::parseParameters<engine::api::TileParameters, TileParametersGrammar>(iter, end); return detail::parseParameters<engine::api::TileParameters, TileParametersGrammar>(iter, end);
} }