Conform to v5 spec and support "unlimited" as radiuses value.

Supersedes: https://github.com/Project-OSRM/osrm-backend/pull/2231

Thanks to Michael Krasnyk (@oxidase) for figuring out the reason for the
segfault earlier:

> https://github.com/Project-OSRM/osrm-backend/pull/2231#issuecomment-207114226
This commit is contained in:
Daniel J. Hofmann 2016-04-08 11:38:07 +02:00 committed by Patrick Niklaus
parent fe08726387
commit def89ac079

View File

@ -7,10 +7,12 @@
#include "engine/hint.hpp"
#include "engine/polyline_compressor.hpp"
#include <boost/optional.hpp>
//#define BOOST_SPIRIT_DEBUG
#include <boost/spirit/include/qi.hpp>
#include <string>
#include <limits>
namespace osrm
{
@ -102,7 +104,9 @@ struct BaseParametersGrammar : boost::spirit::qi::grammar<std::string::iterator>
polyline_chars = qi::char_("a-zA-Z0-9_.--[]{}@?|\\%~`^");
base64_char = qi::char_("a-zA-Z0-9--_=");
radiuses_rule = qi::lit("radiuses=") >> -qi::double_ % ";";
unlimited.add("unlimited", std::numeric_limits<double>::infinity());
radiuses_rule = qi::lit("radiuses=") >> -(unlimited | qi::double_) % ";";
hints_rule =
qi::lit("hints=") >>
qi::as_string[qi::repeat(engine::ENCODED_HINT_SIZE)[base64_char]][add_hint] % ";";
@ -125,6 +129,7 @@ struct BaseParametersGrammar : boost::spirit::qi::grammar<std::string::iterator>
qi::rule<Iterator> bearings_rule;
qi::rule<Iterator> hints_rule;
qi::rule<Iterator> polyline_rule, location_rule;
qi::symbols<char, double> unlimited;
qi::rule<Iterator, RadiusesT()> radiuses_rule;
qi::rule<Iterator, unsigned char()> base64_char;
qi::rule<Iterator, std::string()> alpha_numeral, polyline_chars;