Skip to content

Commit

Permalink
sides grammar
Browse files Browse the repository at this point in the history
  • Loading branch information
oxidase committed May 18, 2017
1 parent 403db7c commit 301a1cc
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 1 deletion.
10 changes: 10 additions & 0 deletions include/engine/api/base_parameters.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,15 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <algorithm>
#include <vector>

enum StartSide
{
DEFAULT,
OPPOSITE,
BOTH

};


namespace osrm
{
namespace engine
Expand Down Expand Up @@ -65,6 +74,7 @@ struct BaseParameters
std::vector<boost::optional<Hint>> hints;
std::vector<boost::optional<double>> radiuses;
std::vector<boost::optional<Bearing>> bearings;
std::vector<StartSide> sides;

// Adds hints to response which can be included in subsequent requests, see `hints` above.
bool generate_hints = true;
Expand Down
13 changes: 12 additions & 1 deletion include/server/api/base_parameters_grammar.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#include <limits>
#include <string>


namespace osrm
{
namespace server
Expand Down Expand Up @@ -149,10 +150,17 @@ struct BaseParametersGrammar : boost::spirit::qi::grammar<Iterator, Signature>
qi::lit("bearings=") >
(-(qi::short_ > ',' > qi::short_))[ph::bind(add_bearing, qi::_r1, qi::_1)] % ';';

side_type.add("d", DEFAULT)("o", OPPOSITE)("b", BOTH);
sides_rule = qi::lit("sides=") >
((side_type | qi::attr(BOTH)) % ';')[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);
| generate_hints_rule(qi::_r1) //
| sides_rule(qi::_r1)
;
}

protected:
Expand All @@ -165,6 +173,7 @@ struct BaseParametersGrammar : boost::spirit::qi::grammar<Iterator, Signature>
qi::rule<Iterator, Signature> hints_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;
Expand All @@ -174,6 +183,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, StartSide> side_type;
};
}
}
Expand Down
11 changes: 11 additions & 0 deletions unit_tests/server/parameters_parser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -388,6 +388,17 @@ BOOST_AUTO_TEST_CASE(valid_route_urls)
BOOST_CHECK_EQUAL(reference_17.geometries, result_17->geometries);
BOOST_CHECK_EQUAL(result_2->annotations_type == RouteParameters::AnnotationsType::All, true);
BOOST_CHECK_EQUAL(result_17->annotations, true);


// parse sides
auto result_18 = parseParameters<RouteParameters>("1,2;3,4;5,6;7,8?sides=o;b;;d");
BOOST_CHECK(result_18);
std::cout << result_18->sides.size() << "\n";
BOOST_CHECK_EQUAL(result_18->sides.size(), 4);
BOOST_CHECK_EQUAL(result_18->sides[0], OPPOSITE);
BOOST_CHECK_EQUAL(result_18->sides[1], BOTH);
BOOST_CHECK_EQUAL(result_18->sides[2], BOTH);
BOOST_CHECK_EQUAL(result_18->sides[3], DEFAULT);
}

BOOST_AUTO_TEST_CASE(valid_table_urls)
Expand Down

0 comments on commit 301a1cc

Please sign in to comment.