Optimize RestrictionParser performance

This commit is contained in:
Siarhei Fedartsou 2022-08-29 17:59:13 +02:00
parent cf223ef516
commit 1d86602cee
2 changed files with 9 additions and 8 deletions

View File

@ -5,7 +5,7 @@
#include <boost/optional/optional.hpp> #include <boost/optional/optional.hpp>
#include <osmium/tags/filter.hpp> #include <osmium/tags/tags_filter.hpp>
#include <set> #include <set>
#include <string> #include <string>
#include <vector> #include <vector>
@ -54,7 +54,7 @@ class RestrictionParser
bool use_turn_restrictions; bool use_turn_restrictions;
bool parse_conditionals; bool parse_conditionals;
std::set<std::string> restrictions; std::set<std::string> restrictions;
osmium::tags::KeyFilter filter; osmium::TagsFilter filter;
}; };
} // namespace extractor } // namespace extractor
} // namespace osrm } // namespace osrm

View File

@ -11,6 +11,7 @@
#include <osmium/osm.hpp> #include <osmium/osm.hpp>
#include <algorithm> #include <algorithm>
#include <osmium/tags/tags_filter.hpp>
namespace osrm namespace osrm
{ {
@ -40,13 +41,13 @@ RestrictionParser::RestrictionParser(bool use_turn_restrictions_,
} }
} }
filter.add(true, "restriction"); filter.add_rule(true, "restriction");
if (parse_conditionals) if (parse_conditionals)
{ {
filter.add(true, "restriction:conditional"); filter.add_rule(true, "restriction:conditional");
for (const auto &namespaced : restrictions_) for (const auto &namespaced : restrictions_)
{ {
filter.add(true, "restriction:" + namespaced + ":conditional"); filter.add_rule(true, "restriction:" + namespaced + ":conditional");
} }
} }
@ -54,7 +55,7 @@ RestrictionParser::RestrictionParser(bool use_turn_restrictions_,
// Include restriction:{mode}:conditional if flagged // Include restriction:{mode}:conditional if flagged
for (const auto &namespaced : restrictions_) for (const auto &namespaced : restrictions_)
{ {
filter.add(true, "restriction:" + namespaced); filter.add_rule(true, "restriction:" + namespaced);
} }
} }
@ -77,8 +78,8 @@ RestrictionParser::TryParse(const osmium::Relation &relation) const
const osmium::TagList &tag_list = relation.tags(); const osmium::TagList &tag_list = relation.tags();
osmium::tags::KeyFilter::iterator fi_begin(filter, tag_list.begin(), tag_list.end()); osmium::TagsFilter::iterator fi_begin(filter, tag_list.begin(), tag_list.end());
osmium::tags::KeyFilter::iterator fi_end(filter, tag_list.end(), tag_list.end()); osmium::TagsFilter::iterator fi_end(filter, tag_list.end(), tag_list.end());
// if it's not a restriction, continue; // if it's not a restriction, continue;
if (fi_begin == fi_end) if (fi_begin == fi_end)