fix boost spirit grammar parsing for annotations

change grammer parsing according to review
This commit is contained in:
Kajari Ghosh 2018-04-23 13:14:52 -04:00
parent 4dbe65b37d
commit d4a1569f0d
2 changed files with 7 additions and 8 deletions

View File

@ -135,7 +135,7 @@ inline TableParameters::AnnotationsType operator|(TableParameters::AnnotationsTy
static_cast<std::underlying_type_t<TableParameters::AnnotationsType>>(rhs)); static_cast<std::underlying_type_t<TableParameters::AnnotationsType>>(rhs));
} }
inline TableParameters::AnnotationsType operator|=(TableParameters::AnnotationsType lhs, inline TableParameters::AnnotationsType &operator|=(TableParameters::AnnotationsType &lhs,
TableParameters::AnnotationsType rhs) TableParameters::AnnotationsType rhs)
{ {
return lhs = lhs | rhs; return lhs = lhs | rhs;

View File

@ -58,17 +58,15 @@ struct TableParametersGrammar : public BaseParametersGrammar<Iterator, Signature
{ {
using AnnotationsType = engine::api::TableParameters::AnnotationsType; using AnnotationsType = engine::api::TableParameters::AnnotationsType;
const auto add_annotation = [](engine::api::TableParameters &table_parameters,
AnnotationsType table_param) {
table_parameters.annotations = table_parameters.annotations | table_param;
};
annotations.add("duration", AnnotationsType::Duration)("distance", annotations.add("duration", AnnotationsType::Duration)("distance",
AnnotationsType::Distance); AnnotationsType::Distance);
annotations_list = annotations[qi::_val |= qi::_1] % ',';
base_rule = BaseGrammar::base_rule(qi::_r1) | base_rule = BaseGrammar::base_rule(qi::_r1) |
(qi::lit("annotations=") > (qi::lit("annotations=") >
(annotations[ph::bind(add_annotation, qi::_r1, qi::_1)] % ',')); annotations_list[ph::bind(&engine::api::TableParameters::annotations,
qi::_r1) = qi::_1]);
} }
protected: protected:
@ -81,6 +79,7 @@ struct TableParametersGrammar : public BaseParametersGrammar<Iterator, Signature
qi::rule<Iterator, Signature> destinations_rule; qi::rule<Iterator, Signature> destinations_rule;
qi::rule<Iterator, std::size_t()> size_t_; qi::rule<Iterator, std::size_t()> size_t_;
qi::symbols<char, engine::api::TableParameters::AnnotationsType> annotations; qi::symbols<char, engine::api::TableParameters::AnnotationsType> annotations;
qi::rule<Iterator, engine::api::TableParameters::AnnotationsType()> annotations_list;
}; };
} }
} }