Allow 4.json and 4.3.json format; needs -lit(".") >> -lit("json") hack^Wworkaround
Rainer Deyke's workaround without the need to do ugly backtracking. References: - http://lists.boost.org/boost-users/2016/03/85960.php - https://github.com/Project-OSRM/osrm-backend/issues/2173#issuecomment-204342785
This commit is contained in:
parent
221f70ac7b
commit
0274afa0f7
@ -3,14 +3,15 @@
|
||||
|
||||
#include "engine/api/match_parameters.hpp"
|
||||
|
||||
//#define BOOST_SPIRIT_DEBUG
|
||||
#include "server/api/base_parameters_grammar.hpp"
|
||||
|
||||
#include <boost/spirit/include/qi_lit.hpp>
|
||||
#include <boost/spirit/include/qi_uint.hpp>
|
||||
#include <boost/spirit/include/qi_action.hpp>
|
||||
#include <boost/spirit/include/qi_bool.hpp>
|
||||
#include <boost/spirit/include/qi_grammar.hpp>
|
||||
#include <boost/spirit/include/qi_action.hpp>
|
||||
#include <boost/spirit/include/qi_lit.hpp>
|
||||
#include <boost/spirit/include/qi_optional.hpp>
|
||||
#include <boost/spirit/include/qi_uint.hpp>
|
||||
|
||||
namespace osrm
|
||||
{
|
||||
@ -31,33 +32,24 @@ struct MatchParametersGrammar final : public BaseParametersGrammar
|
||||
|
||||
MatchParametersGrammar() : BaseParametersGrammar(root_rule, parameters)
|
||||
{
|
||||
const auto set_geojson_type = [this]()
|
||||
{
|
||||
const auto set_geojson_type = [this] {
|
||||
parameters.geometries = engine::api::RouteParameters::GeometriesType::GeoJSON;
|
||||
};
|
||||
const auto set_polyline_type = [this]()
|
||||
{
|
||||
const auto set_polyline_type = [this] {
|
||||
parameters.geometries = engine::api::RouteParameters::GeometriesType::Polyline;
|
||||
};
|
||||
|
||||
const auto set_simplified_type = [this]()
|
||||
{
|
||||
const auto set_simplified_type = [this] {
|
||||
parameters.overview = engine::api::RouteParameters::OverviewType::Simplified;
|
||||
};
|
||||
const auto set_full_type = [this]()
|
||||
{
|
||||
const auto set_full_type = [this] {
|
||||
parameters.overview = engine::api::RouteParameters::OverviewType::Full;
|
||||
};
|
||||
const auto set_false_type = [this]()
|
||||
{
|
||||
const auto set_false_type = [this] {
|
||||
parameters.overview = engine::api::RouteParameters::OverviewType::False;
|
||||
};
|
||||
const auto set_steps = [this](const StepsT steps)
|
||||
{
|
||||
parameters.steps = steps;
|
||||
};
|
||||
const auto set_timestamps = [this](TimestampsT timestamps)
|
||||
{
|
||||
const auto set_steps = [this](const StepsT steps) { parameters.steps = steps; };
|
||||
const auto set_timestamps = [this](TimestampsT timestamps) {
|
||||
parameters.timestamps = std::move(timestamps);
|
||||
};
|
||||
|
||||
@ -70,8 +62,8 @@ struct MatchParametersGrammar final : public BaseParametersGrammar
|
||||
timestamps_rule = qi::lit("timestamps=") >> qi::uint_ % ";";
|
||||
match_rule = steps_rule[set_steps] | geometries_rule | overview_rule |
|
||||
timestamps_rule[set_timestamps];
|
||||
root_rule =
|
||||
query_rule >> -qi::lit(".json") >> -(qi::lit("?") >> (match_rule | base_rule) % '&');
|
||||
root_rule = query_rule >> -qi::lit(".") >> -qi::lit("json") >>
|
||||
-(qi::lit("?") >> (match_rule | base_rule) % '&');
|
||||
}
|
||||
|
||||
engine::api::MatchParameters parameters;
|
||||
|
@ -3,13 +3,14 @@
|
||||
|
||||
#include "engine/api/nearest_parameters.hpp"
|
||||
|
||||
//#define BOOST_SPIRIT_DEBUG
|
||||
#include "server/api/base_parameters_grammar.hpp"
|
||||
|
||||
#include <boost/spirit/include/qi_lit.hpp>
|
||||
#include <boost/spirit/include/qi_uint.hpp>
|
||||
#include <boost/spirit/include/qi_grammar.hpp>
|
||||
#include <boost/spirit/include/qi_action.hpp>
|
||||
#include <boost/spirit/include/qi_grammar.hpp>
|
||||
#include <boost/spirit/include/qi_lit.hpp>
|
||||
#include <boost/spirit/include/qi_optional.hpp>
|
||||
#include <boost/spirit/include/qi_uint.hpp>
|
||||
|
||||
namespace osrm
|
||||
{
|
||||
@ -26,13 +27,12 @@ struct NearestParametersGrammar final : public BaseParametersGrammar
|
||||
|
||||
NearestParametersGrammar() : BaseParametersGrammar(root_rule, parameters)
|
||||
{
|
||||
const auto set_number = [this](const unsigned number)
|
||||
{
|
||||
const auto set_number = [this](const unsigned number) {
|
||||
parameters.number_of_results = number;
|
||||
};
|
||||
nearest_rule = (qi::lit("number=") >> qi::uint_)[set_number];
|
||||
root_rule =
|
||||
query_rule >> -qi::lit(".json") >> -(qi::lit("?") >> (nearest_rule | base_rule) % '&');
|
||||
root_rule = query_rule >> -qi::lit(".") >> -qi::lit("json") >>
|
||||
-(qi::lit("?") >> (nearest_rule | base_rule) % '&');
|
||||
}
|
||||
|
||||
engine::api::NearestParameters parameters;
|
||||
|
@ -3,12 +3,13 @@
|
||||
|
||||
#include "engine/api/route_parameters.hpp"
|
||||
|
||||
//#define BOOST_SPIRIT_DEBUG
|
||||
#include "server/api/base_parameters_grammar.hpp"
|
||||
|
||||
#include <boost/spirit/include/qi_lit.hpp>
|
||||
#include <boost/spirit/include/qi_action.hpp>
|
||||
#include <boost/spirit/include/qi_bool.hpp>
|
||||
#include <boost/spirit/include/qi_grammar.hpp>
|
||||
#include <boost/spirit/include/qi_action.hpp>
|
||||
#include <boost/spirit/include/qi_lit.hpp>
|
||||
#include <boost/spirit/include/qi_optional.hpp>
|
||||
|
||||
namespace osrm
|
||||
@ -31,39 +32,27 @@ struct RouteParametersGrammar : public BaseParametersGrammar
|
||||
|
||||
RouteParametersGrammar() : BaseParametersGrammar(root_rule, parameters)
|
||||
{
|
||||
const auto set_geojson_type = [this]()
|
||||
{
|
||||
const auto set_geojson_type = [this] {
|
||||
parameters.geometries = engine::api::RouteParameters::GeometriesType::GeoJSON;
|
||||
};
|
||||
const auto set_polyline_type = [this]()
|
||||
{
|
||||
const auto set_polyline_type = [this] {
|
||||
parameters.geometries = engine::api::RouteParameters::GeometriesType::Polyline;
|
||||
};
|
||||
|
||||
const auto set_simplified_type = [this]()
|
||||
{
|
||||
const auto set_simplified_type = [this] {
|
||||
parameters.overview = engine::api::RouteParameters::OverviewType::Simplified;
|
||||
};
|
||||
const auto set_full_type = [this]()
|
||||
{
|
||||
const auto set_full_type = [this] {
|
||||
parameters.overview = engine::api::RouteParameters::OverviewType::Full;
|
||||
};
|
||||
const auto set_false_type = [this]()
|
||||
{
|
||||
const auto set_false_type = [this] {
|
||||
parameters.overview = engine::api::RouteParameters::OverviewType::False;
|
||||
};
|
||||
const auto set_steps = [this](const StepsT steps)
|
||||
{
|
||||
parameters.steps = steps;
|
||||
};
|
||||
const auto set_alternatives = [this](const AlternativeT alternatives)
|
||||
{
|
||||
const auto set_steps = [this](const StepsT steps) { parameters.steps = steps; };
|
||||
const auto set_alternatives = [this](const AlternativeT alternatives) {
|
||||
parameters.alternatives = alternatives;
|
||||
};
|
||||
const auto set_uturns = [this](UturnsT uturns)
|
||||
{
|
||||
parameters.uturns = std::move(uturns);
|
||||
};
|
||||
const auto set_uturns = [this](UturnsT uturns) { parameters.uturns = std::move(uturns); };
|
||||
|
||||
alternatives_rule = qi::lit("alternatives=") >> qi::bool_;
|
||||
steps_rule = qi::lit("steps=") >> qi::bool_;
|
||||
@ -76,8 +65,8 @@ struct RouteParametersGrammar : public BaseParametersGrammar
|
||||
route_rule = steps_rule[set_steps] | alternatives_rule[set_alternatives] | geometries_rule |
|
||||
overview_rule | uturns_rule;
|
||||
|
||||
root_rule =
|
||||
query_rule >> -qi::lit(".json") >> -(qi::lit("?") >> (route_rule | base_rule) % '&');
|
||||
root_rule = query_rule >> -qi::lit(".") >> -qi::lit("json") >>
|
||||
-(qi::lit("?") >> (route_rule | base_rule) % '&');
|
||||
}
|
||||
|
||||
engine::api::RouteParameters parameters;
|
||||
|
@ -3,13 +3,14 @@
|
||||
|
||||
#include "engine/api/table_parameters.hpp"
|
||||
|
||||
//#define BOOST_SPIRIT_DEBUG
|
||||
#include "server/api/base_parameters_grammar.hpp"
|
||||
|
||||
#include <boost/spirit/include/qi_lit.hpp>
|
||||
#include <boost/spirit/include/qi_uint.hpp>
|
||||
#include <boost/spirit/include/qi_grammar.hpp>
|
||||
#include <boost/spirit/include/qi_action.hpp>
|
||||
#include <boost/spirit/include/qi_grammar.hpp>
|
||||
#include <boost/spirit/include/qi_lit.hpp>
|
||||
#include <boost/spirit/include/qi_optional.hpp>
|
||||
#include <boost/spirit/include/qi_uint.hpp>
|
||||
|
||||
namespace osrm
|
||||
{
|
||||
@ -28,12 +29,10 @@ struct TableParametersGrammar final : public BaseParametersGrammar
|
||||
|
||||
TableParametersGrammar() : BaseParametersGrammar(root_rule, parameters)
|
||||
{
|
||||
const auto set_destiantions = [this](DestinationsT dests)
|
||||
{
|
||||
const auto set_destiantions = [this](DestinationsT dests) {
|
||||
parameters.destinations = std::move(dests);
|
||||
};
|
||||
const auto set_sources = [this](SourcesT sources)
|
||||
{
|
||||
const auto set_sources = [this](SourcesT sources) {
|
||||
parameters.sources = std::move(sources);
|
||||
};
|
||||
destinations_rule = (qi::lit("destinations=") >> (qi::ulong_ % ";")[set_destiantions]) |
|
||||
@ -42,8 +41,8 @@ struct TableParametersGrammar final : public BaseParametersGrammar
|
||||
(qi::lit("sources=") >> (qi::ulong_ % ";")[set_sources]) | qi::lit("sources=all");
|
||||
table_rule = destinations_rule | sources_rule;
|
||||
|
||||
root_rule =
|
||||
query_rule >> -qi::lit(".json") >> -(qi::lit("?") >> (table_rule | base_rule) % '&');
|
||||
root_rule = query_rule >> -qi::lit(".") >> -qi::lit("json") >>
|
||||
-(qi::lit("?") >> (table_rule | base_rule) % '&');
|
||||
}
|
||||
|
||||
engine::api::TableParameters parameters;
|
||||
|
@ -3,14 +3,15 @@
|
||||
|
||||
#include "engine/api/trip_parameters.hpp"
|
||||
|
||||
//#define BOOST_SPIRIT_DEBUG
|
||||
#include "server/api/base_parameters_grammar.hpp"
|
||||
|
||||
#include <boost/spirit/include/qi_lit.hpp>
|
||||
#include <boost/spirit/include/qi_uint.hpp>
|
||||
#include <boost/spirit/include/qi_action.hpp>
|
||||
#include <boost/spirit/include/qi_bool.hpp>
|
||||
#include <boost/spirit/include/qi_grammar.hpp>
|
||||
#include <boost/spirit/include/qi_action.hpp>
|
||||
#include <boost/spirit/include/qi_lit.hpp>
|
||||
#include <boost/spirit/include/qi_optional.hpp>
|
||||
#include <boost/spirit/include/qi_uint.hpp>
|
||||
|
||||
namespace osrm
|
||||
{
|
||||
@ -30,31 +31,23 @@ struct TripParametersGrammar final : public BaseParametersGrammar
|
||||
|
||||
TripParametersGrammar() : BaseParametersGrammar(root_rule, parameters)
|
||||
{
|
||||
const auto set_geojson_type = [this]()
|
||||
{
|
||||
const auto set_geojson_type = [this] {
|
||||
parameters.geometries = engine::api::RouteParameters::GeometriesType::GeoJSON;
|
||||
};
|
||||
const auto set_polyline_type = [this]()
|
||||
{
|
||||
const auto set_polyline_type = [this] {
|
||||
parameters.geometries = engine::api::RouteParameters::GeometriesType::Polyline;
|
||||
};
|
||||
|
||||
const auto set_simplified_type = [this]()
|
||||
{
|
||||
const auto set_simplified_type = [this] {
|
||||
parameters.overview = engine::api::RouteParameters::OverviewType::Simplified;
|
||||
};
|
||||
const auto set_full_type = [this]()
|
||||
{
|
||||
const auto set_full_type = [this] {
|
||||
parameters.overview = engine::api::RouteParameters::OverviewType::Full;
|
||||
};
|
||||
const auto set_false_type = [this]()
|
||||
{
|
||||
const auto set_false_type = [this] {
|
||||
parameters.overview = engine::api::RouteParameters::OverviewType::False;
|
||||
};
|
||||
const auto set_steps = [this](const StepsT steps)
|
||||
{
|
||||
parameters.steps = steps;
|
||||
};
|
||||
const auto set_steps = [this](const StepsT steps) { parameters.steps = steps; };
|
||||
|
||||
steps_rule = qi::lit("steps=") >> qi::bool_;
|
||||
geometries_rule = qi::lit("geometries=geojson")[set_geojson_type] |
|
||||
@ -64,8 +57,8 @@ struct TripParametersGrammar final : public BaseParametersGrammar
|
||||
qi::lit("overview=false")[set_false_type];
|
||||
trip_rule = steps_rule[set_steps] | geometries_rule | overview_rule;
|
||||
|
||||
root_rule =
|
||||
query_rule >> -qi::lit(".json") >> -(qi::lit("?") >> (trip_rule | base_rule) % '&');
|
||||
root_rule = query_rule >> -qi::lit(".") >> -qi::lit("json") >>
|
||||
-(qi::lit("?") >> (trip_rule | base_rule) % '&');
|
||||
}
|
||||
|
||||
engine::api::TripParameters parameters;
|
||||
|
Loading…
Reference in New Issue
Block a user