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

View File

@ -11,6 +11,7 @@
#include <osmium/osm.hpp>
#include <algorithm>
#include <osmium/tags/tags_filter.hpp>
namespace osrm
{
@ -40,13 +41,13 @@ RestrictionParser::RestrictionParser(bool use_turn_restrictions_,
}
}
filter.add(true, "restriction");
filter.add_rule(true, "restriction");
if (parse_conditionals)
{
filter.add(true, "restriction:conditional");
filter.add_rule(true, "restriction:conditional");
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
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();
osmium::tags::KeyFilter::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_begin(filter, tag_list.begin(), tag_list.end());
osmium::TagsFilter::iterator fi_end(filter, tag_list.end(), tag_list.end());
// if it's not a restriction, continue;
if (fi_begin == fi_end)