Change qi::lit for qi::symbols for the sides parameter parser.

Refactor code :
 - Suppress StartSide Enum
 - Change Side Structure for Enum

Signed-off-by: FILLAU Jean-Maxime <jean-maxime.fillau@mapotempo.com>
This commit is contained in:
FILLAU Jean-Maxime
2017-05-22 12:10:43 +02:00
committed by Patrick Niklaus
parent 2de17f3fd0
commit ec7934ea33
9 changed files with 40 additions and 86 deletions
+9 -14
View File
@@ -99,16 +99,6 @@ struct BaseParametersGrammar : boost::spirit::qi::grammar<Iterator, Signature>
base_parameters.bearings.push_back(std::move(bearing));
};
const auto add_side = [](engine::api::BaseParameters &base_parameters,
const boost::optional<std::string> &side_string) {
boost::optional<engine::Side> side;
if (side_string)
{
side = engine::Side{engine::Side::fromString(side_string.get())};
}
base_parameters.sides.push_back(std::move(side));
};
polyline_chars = qi::char_("a-zA-Z0-9_.--[]{}@?|\\%~`^");
base64_char = qi::char_("a-zA-Z0-9--_=");
unlimited_rule = qi::lit("unlimited")[qi::_val = std::numeric_limits<double>::infinity()];
@@ -159,13 +149,16 @@ struct BaseParametersGrammar : boost::spirit::qi::grammar<Iterator, Signature>
qi::lit("bearings=") >
(-(qi::short_ > ',' > qi::short_))[ph::bind(add_bearing, qi::_r1, qi::_1)] % ';';
sides_rule = qi::lit("sides=") >
(-qi::as_string[qi::char_("a-zA")])[ph::bind(add_side, qi::_r1, qi::_1)] % ';';
side_type.add("d", engine::Side::DEFAULT)("o", engine::Side::OPPOSITE)("b", engine::Side::BOTH);
sides_rule =
qi::lit("sides=") >
(-side_type % ';')[ph::bind(&engine::api::BaseParameters::sides, qi::_r1) = qi::_1];
base_rule = radiuses_rule(qi::_r1) //
| hints_rule(qi::_r1) //
| bearings_rule(qi::_r1) //
| generate_hints_rule(qi::_r1) | sides_rule(qi::_r1);
| generate_hints_rule(qi::_r1)
| sides_rule(qi::_r1);
}
protected:
@@ -176,9 +169,9 @@ struct BaseParametersGrammar : boost::spirit::qi::grammar<Iterator, Signature>
qi::rule<Iterator, Signature> bearings_rule;
qi::rule<Iterator, Signature> radiuses_rule;
qi::rule<Iterator, Signature> hints_rule;
qi::rule<Iterator, Signature> sides_rule;
qi::rule<Iterator, Signature> generate_hints_rule;
qi::rule<Iterator, Signature> sides_rule;
qi::rule<Iterator, osrm::engine::Bearing()> bearing_rule;
qi::rule<Iterator, osrm::util::Coordinate()> location_rule;
@@ -188,6 +181,8 @@ struct BaseParametersGrammar : boost::spirit::qi::grammar<Iterator, Signature>
qi::rule<Iterator, std::string()> polyline_chars;
qi::rule<Iterator, double()> unlimited_rule;
qi::real_parser<double, json_policy> double_;
qi::symbols<char, engine::Side> side_type;
};
}
}