1 #ifndef OSMIUM_TAGS_FILTER_HPP 2 #define OSMIUM_TAGS_FILTER_HPP 38 #include <type_traits> 41 #include <boost/iterator/filter_iterator.hpp> 50 template <
typename TKey>
52 bool operator()(
const TKey& rule_key,
const char* tag_key) {
53 return rule_key == tag_key;
58 bool operator()(
const std::string& rule_key,
const char* tag_key) {
59 return rule_key.compare(0, std::string::npos, tag_key, 0, rule_key.size()) == 0;
63 template <
typename TValue>
65 bool operator()(
const TValue& rule_value,
const char* tag_value) {
66 return rule_value == tag_value;
77 template <
typename TKey,
typename TValue=
void,
typename TKeyComp=match_key<TKey>,
typename TValueComp=match_value<TValue>>
81 using value_type =
typename std::conditional<std::is_void<TValue>::value, bool, TValue>
::type;
113 using iterator = boost::filter_iterator<filter_type, osmium::TagList::const_iterator>;
115 explicit Filter(
bool default_result =
false) :
116 m_default_result(default_result) {
119 template <typename V=TValue, typename std::enable_if<!std::is_void<V>::value,
int>::type = 0>
121 m_rules.emplace_back(result,
false, key, value);
126 m_rules.emplace_back(result,
true, key);
131 for (
const Rule& rule : m_rules) {
132 if (TKeyComp()(rule.key, tag.
key()) && (rule.ignore_value || TValueComp()(rule.value, tag.
value()))) {
136 return m_default_result;
143 return m_rules.size();
150 return m_rules.empty();
163 #endif // OSMIUM_TAGS_FILTER_HPP
type
Definition: entity_bits.hpp:63
Namespace for everything in the Osmium library.
Definition: assembler.hpp:73
const char * key() const noexcept
Definition: tag.hpp:79
const char * value() const
Definition: tag.hpp:83