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"
|
#include "engine/api/match_parameters.hpp"
|
||||||
|
|
||||||
|
//#define BOOST_SPIRIT_DEBUG
|
||||||
#include "server/api/base_parameters_grammar.hpp"
|
#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_uint.hpp>
|
|
||||||
#include <boost/spirit/include/qi_bool.hpp>
|
#include <boost/spirit/include/qi_bool.hpp>
|
||||||
#include <boost/spirit/include/qi_grammar.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_optional.hpp>
|
||||||
|
#include <boost/spirit/include/qi_uint.hpp>
|
||||||
|
|
||||||
namespace osrm
|
namespace osrm
|
||||||
{
|
{
|
||||||
@ -31,33 +32,24 @@ struct MatchParametersGrammar final : public BaseParametersGrammar
|
|||||||
|
|
||||||
MatchParametersGrammar() : BaseParametersGrammar(root_rule, parameters)
|
MatchParametersGrammar() : BaseParametersGrammar(root_rule, parameters)
|
||||||
{
|
{
|
||||||
const auto set_geojson_type = [this]()
|
const auto set_geojson_type = [this] {
|
||||||
{
|
|
||||||
parameters.geometries = engine::api::RouteParameters::GeometriesType::GeoJSON;
|
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;
|
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;
|
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;
|
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;
|
parameters.overview = engine::api::RouteParameters::OverviewType::False;
|
||||||
};
|
};
|
||||||
const auto set_steps = [this](const StepsT steps)
|
const auto set_steps = [this](const StepsT steps) { parameters.steps = steps; };
|
||||||
{
|
const auto set_timestamps = [this](TimestampsT timestamps) {
|
||||||
parameters.steps = steps;
|
|
||||||
};
|
|
||||||
const auto set_timestamps = [this](TimestampsT timestamps)
|
|
||||||
{
|
|
||||||
parameters.timestamps = std::move(timestamps);
|
parameters.timestamps = std::move(timestamps);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -70,8 +62,8 @@ struct MatchParametersGrammar final : public BaseParametersGrammar
|
|||||||
timestamps_rule = qi::lit("timestamps=") >> qi::uint_ % ";";
|
timestamps_rule = qi::lit("timestamps=") >> qi::uint_ % ";";
|
||||||
match_rule = steps_rule[set_steps] | geometries_rule | overview_rule |
|
match_rule = steps_rule[set_steps] | geometries_rule | overview_rule |
|
||||||
timestamps_rule[set_timestamps];
|
timestamps_rule[set_timestamps];
|
||||||
root_rule =
|
root_rule = query_rule >> -qi::lit(".") >> -qi::lit("json") >>
|
||||||
query_rule >> -qi::lit(".json") >> -(qi::lit("?") >> (match_rule | base_rule) % '&');
|
-(qi::lit("?") >> (match_rule | base_rule) % '&');
|
||||||
}
|
}
|
||||||
|
|
||||||
engine::api::MatchParameters parameters;
|
engine::api::MatchParameters parameters;
|
||||||
|
@ -3,13 +3,14 @@
|
|||||||
|
|
||||||
#include "engine/api/nearest_parameters.hpp"
|
#include "engine/api/nearest_parameters.hpp"
|
||||||
|
|
||||||
|
//#define BOOST_SPIRIT_DEBUG
|
||||||
#include "server/api/base_parameters_grammar.hpp"
|
#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_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_optional.hpp>
|
||||||
|
#include <boost/spirit/include/qi_uint.hpp>
|
||||||
|
|
||||||
namespace osrm
|
namespace osrm
|
||||||
{
|
{
|
||||||
@ -26,13 +27,12 @@ struct NearestParametersGrammar final : public BaseParametersGrammar
|
|||||||
|
|
||||||
NearestParametersGrammar() : BaseParametersGrammar(root_rule, parameters)
|
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;
|
parameters.number_of_results = number;
|
||||||
};
|
};
|
||||||
nearest_rule = (qi::lit("number=") >> qi::uint_)[set_number];
|
nearest_rule = (qi::lit("number=") >> qi::uint_)[set_number];
|
||||||
root_rule =
|
root_rule = query_rule >> -qi::lit(".") >> -qi::lit("json") >>
|
||||||
query_rule >> -qi::lit(".json") >> -(qi::lit("?") >> (nearest_rule | base_rule) % '&');
|
-(qi::lit("?") >> (nearest_rule | base_rule) % '&');
|
||||||
}
|
}
|
||||||
|
|
||||||
engine::api::NearestParameters parameters;
|
engine::api::NearestParameters parameters;
|
||||||
|
@ -3,12 +3,13 @@
|
|||||||
|
|
||||||
#include "engine/api/route_parameters.hpp"
|
#include "engine/api/route_parameters.hpp"
|
||||||
|
|
||||||
|
//#define BOOST_SPIRIT_DEBUG
|
||||||
#include "server/api/base_parameters_grammar.hpp"
|
#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_bool.hpp>
|
||||||
#include <boost/spirit/include/qi_grammar.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_optional.hpp>
|
||||||
|
|
||||||
namespace osrm
|
namespace osrm
|
||||||
@ -31,39 +32,27 @@ struct RouteParametersGrammar : public BaseParametersGrammar
|
|||||||
|
|
||||||
RouteParametersGrammar() : BaseParametersGrammar(root_rule, parameters)
|
RouteParametersGrammar() : BaseParametersGrammar(root_rule, parameters)
|
||||||
{
|
{
|
||||||
const auto set_geojson_type = [this]()
|
const auto set_geojson_type = [this] {
|
||||||
{
|
|
||||||
parameters.geometries = engine::api::RouteParameters::GeometriesType::GeoJSON;
|
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;
|
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;
|
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;
|
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;
|
parameters.overview = engine::api::RouteParameters::OverviewType::False;
|
||||||
};
|
};
|
||||||
const auto set_steps = [this](const StepsT steps)
|
const auto set_steps = [this](const StepsT steps) { parameters.steps = steps; };
|
||||||
{
|
const auto set_alternatives = [this](const AlternativeT alternatives) {
|
||||||
parameters.steps = steps;
|
|
||||||
};
|
|
||||||
const auto set_alternatives = [this](const AlternativeT alternatives)
|
|
||||||
{
|
|
||||||
parameters.alternatives = alternatives;
|
parameters.alternatives = alternatives;
|
||||||
};
|
};
|
||||||
const auto set_uturns = [this](UturnsT uturns)
|
const auto set_uturns = [this](UturnsT uturns) { parameters.uturns = std::move(uturns); };
|
||||||
{
|
|
||||||
parameters.uturns = std::move(uturns);
|
|
||||||
};
|
|
||||||
|
|
||||||
alternatives_rule = qi::lit("alternatives=") >> qi::bool_;
|
alternatives_rule = qi::lit("alternatives=") >> qi::bool_;
|
||||||
steps_rule = qi::lit("steps=") >> 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 |
|
route_rule = steps_rule[set_steps] | alternatives_rule[set_alternatives] | geometries_rule |
|
||||||
overview_rule | uturns_rule;
|
overview_rule | uturns_rule;
|
||||||
|
|
||||||
root_rule =
|
root_rule = query_rule >> -qi::lit(".") >> -qi::lit("json") >>
|
||||||
query_rule >> -qi::lit(".json") >> -(qi::lit("?") >> (route_rule | base_rule) % '&');
|
-(qi::lit("?") >> (route_rule | base_rule) % '&');
|
||||||
}
|
}
|
||||||
|
|
||||||
engine::api::RouteParameters parameters;
|
engine::api::RouteParameters parameters;
|
||||||
|
@ -3,13 +3,14 @@
|
|||||||
|
|
||||||
#include "engine/api/table_parameters.hpp"
|
#include "engine/api/table_parameters.hpp"
|
||||||
|
|
||||||
|
//#define BOOST_SPIRIT_DEBUG
|
||||||
#include "server/api/base_parameters_grammar.hpp"
|
#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_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_optional.hpp>
|
||||||
|
#include <boost/spirit/include/qi_uint.hpp>
|
||||||
|
|
||||||
namespace osrm
|
namespace osrm
|
||||||
{
|
{
|
||||||
@ -28,12 +29,10 @@ struct TableParametersGrammar final : public BaseParametersGrammar
|
|||||||
|
|
||||||
TableParametersGrammar() : BaseParametersGrammar(root_rule, parameters)
|
TableParametersGrammar() : BaseParametersGrammar(root_rule, parameters)
|
||||||
{
|
{
|
||||||
const auto set_destiantions = [this](DestinationsT dests)
|
const auto set_destiantions = [this](DestinationsT dests) {
|
||||||
{
|
|
||||||
parameters.destinations = std::move(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);
|
parameters.sources = std::move(sources);
|
||||||
};
|
};
|
||||||
destinations_rule = (qi::lit("destinations=") >> (qi::ulong_ % ";")[set_destiantions]) |
|
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");
|
(qi::lit("sources=") >> (qi::ulong_ % ";")[set_sources]) | qi::lit("sources=all");
|
||||||
table_rule = destinations_rule | sources_rule;
|
table_rule = destinations_rule | sources_rule;
|
||||||
|
|
||||||
root_rule =
|
root_rule = query_rule >> -qi::lit(".") >> -qi::lit("json") >>
|
||||||
query_rule >> -qi::lit(".json") >> -(qi::lit("?") >> (table_rule | base_rule) % '&');
|
-(qi::lit("?") >> (table_rule | base_rule) % '&');
|
||||||
}
|
}
|
||||||
|
|
||||||
engine::api::TableParameters parameters;
|
engine::api::TableParameters parameters;
|
||||||
|
@ -3,14 +3,15 @@
|
|||||||
|
|
||||||
#include "engine/api/trip_parameters.hpp"
|
#include "engine/api/trip_parameters.hpp"
|
||||||
|
|
||||||
|
//#define BOOST_SPIRIT_DEBUG
|
||||||
#include "server/api/base_parameters_grammar.hpp"
|
#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_uint.hpp>
|
|
||||||
#include <boost/spirit/include/qi_bool.hpp>
|
#include <boost/spirit/include/qi_bool.hpp>
|
||||||
#include <boost/spirit/include/qi_grammar.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_optional.hpp>
|
||||||
|
#include <boost/spirit/include/qi_uint.hpp>
|
||||||
|
|
||||||
namespace osrm
|
namespace osrm
|
||||||
{
|
{
|
||||||
@ -30,31 +31,23 @@ struct TripParametersGrammar final : public BaseParametersGrammar
|
|||||||
|
|
||||||
TripParametersGrammar() : BaseParametersGrammar(root_rule, parameters)
|
TripParametersGrammar() : BaseParametersGrammar(root_rule, parameters)
|
||||||
{
|
{
|
||||||
const auto set_geojson_type = [this]()
|
const auto set_geojson_type = [this] {
|
||||||
{
|
|
||||||
parameters.geometries = engine::api::RouteParameters::GeometriesType::GeoJSON;
|
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;
|
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;
|
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;
|
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;
|
parameters.overview = engine::api::RouteParameters::OverviewType::False;
|
||||||
};
|
};
|
||||||
const auto set_steps = [this](const StepsT steps)
|
const auto set_steps = [this](const StepsT steps) { parameters.steps = steps; };
|
||||||
{
|
|
||||||
parameters.steps = steps;
|
|
||||||
};
|
|
||||||
|
|
||||||
steps_rule = qi::lit("steps=") >> qi::bool_;
|
steps_rule = qi::lit("steps=") >> qi::bool_;
|
||||||
geometries_rule = qi::lit("geometries=geojson")[set_geojson_type] |
|
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];
|
qi::lit("overview=false")[set_false_type];
|
||||||
trip_rule = steps_rule[set_steps] | geometries_rule | overview_rule;
|
trip_rule = steps_rule[set_steps] | geometries_rule | overview_rule;
|
||||||
|
|
||||||
root_rule =
|
root_rule = query_rule >> -qi::lit(".") >> -qi::lit("json") >>
|
||||||
query_rule >> -qi::lit(".json") >> -(qi::lit("?") >> (trip_rule | base_rule) % '&');
|
-(qi::lit("?") >> (trip_rule | base_rule) % '&');
|
||||||
}
|
}
|
||||||
|
|
||||||
engine::api::TripParameters parameters;
|
engine::api::TripParameters parameters;
|
||||||
|
Loading…
Reference in New Issue
Block a user