implement bitwise and operator

This commit is contained in:
karenzshea 2017-01-27 13:40:17 +01:00 committed by Patrick Niklaus
parent a6cd0863bc
commit 04954de9c6
2 changed files with 22 additions and 16 deletions

View File

@ -67,7 +67,7 @@ struct RouteParameters : public BaseParameters
Full, Full,
False False
}; };
enum class AnnotationsType enum class AnnotationsType : int
{ {
None = 0, None = 0,
Duration = 1 << 1, Duration = 1 << 1,
@ -86,8 +86,8 @@ struct RouteParameters : public BaseParameters
const boost::optional<bool> continue_straight_, const boost::optional<bool> continue_straight_,
Args... args_) Args... args_)
: BaseParameters{std::forward<Args>(args_)...}, steps{steps_}, alternatives{alternatives_}, : BaseParameters{std::forward<Args>(args_)...}, steps{steps_}, alternatives{alternatives_},
annotations{false}, annotations_type{AnnotationsType::None}, geometries{geometries_}, overview{overview_}, annotations{false}, annotations_type{AnnotationsType::None}, geometries{geometries_},
continue_straight{continue_straight_} overview{overview_}, continue_straight{continue_straight_}
// Once we perfectly-forward `args` (see #2990) this constructor can delegate to the one below. // Once we perfectly-forward `args` (see #2990) this constructor can delegate to the one below.
{ {
} }
@ -102,8 +102,9 @@ struct RouteParameters : public BaseParameters
const boost::optional<bool> continue_straight_, const boost::optional<bool> continue_straight_,
Args... args_) Args... args_)
: BaseParameters{std::forward<Args>(args_)...}, steps{steps_}, alternatives{alternatives_}, : BaseParameters{std::forward<Args>(args_)...}, steps{steps_}, alternatives{alternatives_},
annotations{annotations_}, annotations_type{annotations_ ? AnnotationsType::All : AnnotationsType::None}, geometries{geometries_}, overview{overview_}, annotations{annotations_},
continue_straight{continue_straight_} annotations_type{annotations_ ? AnnotationsType::All : AnnotationsType::None},
geometries{geometries_}, overview{overview_}, continue_straight{continue_straight_}
{ {
} }
@ -117,8 +118,8 @@ struct RouteParameters : public BaseParameters
const boost::optional<bool> continue_straight_, const boost::optional<bool> continue_straight_,
Args... args_) Args... args_)
: BaseParameters{std::forward<Args>(args_)...}, steps{steps_}, alternatives{alternatives_}, : BaseParameters{std::forward<Args>(args_)...}, steps{steps_}, alternatives{alternatives_},
annotations_type{annotations_}, annotations{true}, geometries{geometries_}, overview{overview_}, annotations_type{annotations_}, annotations{true}, geometries{geometries_},
continue_straight{continue_straight_} overview{overview_}, continue_straight{continue_straight_}
{ {
} }
@ -132,6 +133,15 @@ struct RouteParameters : public BaseParameters
bool IsValid() const { return coordinates.size() >= 2 && BaseParameters::IsValid(); } bool IsValid() const { return coordinates.size() >= 2 && BaseParameters::IsValid(); }
}; };
inline RouteParameters::AnnotationsType operator|(RouteParameters::AnnotationsType lhs,
RouteParameters::AnnotationsType rhs)
{
return (RouteParameters::AnnotationsType)(
static_cast<std::underlying_type_t<RouteParameters::AnnotationsType>>(lhs) |
static_cast<std::underlying_type_t<RouteParameters::AnnotationsType>>(rhs));
}
} }
} }
} }

View File

@ -26,15 +26,6 @@ struct RouteParametersGrammar : public BaseParametersGrammar<Iterator, Signature
{ {
using BaseGrammar = BaseParametersGrammar<Iterator, Signature>; using BaseGrammar = BaseParametersGrammar<Iterator, Signature>;
const auto add_annotation = [](engine::api::RouteParameters &route_parameters,
engine::api::RouteParameters::AnnotationsType &route_param) {
// bitflag each parameter
if (route_param)
{
route_parameters.annotations_ = route_parameters.annotations_ | route_param;
}
};
RouteParametersGrammar() : RouteParametersGrammar(root_rule) RouteParametersGrammar() : RouteParametersGrammar(root_rule)
{ {
route_rule = route_rule =
@ -51,6 +42,11 @@ struct RouteParametersGrammar : public BaseParametersGrammar<Iterator, Signature
RouteParametersGrammar(qi::rule<Iterator, Signature> &root_rule_) : BaseGrammar(root_rule_) RouteParametersGrammar(qi::rule<Iterator, Signature> &root_rule_) : BaseGrammar(root_rule_)
{ {
const auto add_annotation = [](engine::api::RouteParameters &route_parameters,
engine::api::RouteParameters::AnnotationsType &route_param) {
return route_parameters.annotations_type = route_parameters.annotations_type | route_param;
};
geometries_type.add("geojson", engine::api::RouteParameters::GeometriesType::GeoJSON)( geometries_type.add("geojson", engine::api::RouteParameters::GeometriesType::GeoJSON)(
"polyline", engine::api::RouteParameters::GeometriesType::Polyline)( "polyline", engine::api::RouteParameters::GeometriesType::Polyline)(
"polyline6", engine::api::RouteParameters::GeometriesType::Polyline6); "polyline6", engine::api::RouteParameters::GeometriesType::Polyline6);