Loading...
Searching...
No Matches
osmium::TagsFilterBase< TResult > Class Template Reference

`#include <tags_filter.hpp>`

## Public Types

using | iterator = osmium::memory::CollectionFilterIterator<TagsFilterBase, const osmium::Tag>

## Public Member Functions

| TagsFilterBase (const TResult default_result=TResult{})
void | set_default_result (const TResult default_result) noexcept
TagsFilterBase & | add_rule (const TResult result, const TagMatcher &matcher)
template<typename... TArgs>
TagsFilterBase & | add_rule (const TResult result, TArgs &&... args)
TResult | operator() (const osmium::Tag &tag) const noexcept
std::size_t | count () const noexcept
bool | empty () const noexcept

## Private Attributes

std::vector< std::pair< TResult, TagMatcher > > | m_rules
TResult | m_default_result

## Detailed Description

template<typename TResult>
class osmium::TagsFilterBase< TResult >

A TagsFilterBase is a list of rules (defined using TagMatchers) to check tags against. The first rule that matches sets the result.

Usually you want to use the TagsFilter class, which is simply a specialization with TResult=bool. But TResult can be any class that has a default constructor and a conversion to bool. The class should be small, because it is copied around in some places.

Here is an example matching any "highway" tag except "highway=motorway":

osmium::TagsFilter filter{false};
filter.add_rule(false, osmium::TagMatcher{"highway", "motorway"});
filter.add_rule(true, osmium::TagMatcher{"highway"});
osmium::Tag& tag = ...;
bool result = filter(tag);
osmium::TagMatcher
Definition matcher.hpp:48
osmium::Tag
Definition tag.hpp:48
osmium::TagsFilterBase< bool >
osmium::TagsFilterBase::add_rule
TagsFilterBase & add_rule(const TResult result, const TagMatcher &matcher)
Definition tags_filter.hpp:100

Use this instead of the old osmium::tags::Filter.

## Member Typedef Documentation

## iterator

template<typename TResult >

using osmium::TagsFilterBase< TResult >::iterator = osmium::memory::CollectionFilterIterator<TagsFilterBase, const osmium::Tag>

## Constructor & Destructor Documentation

## TagsFilterBase()

template<typename TResult >

osmium::TagsFilterBase< TResult >::TagsFilterBase | ( | const TResult | default_result = TResult{} | ) |

inline explicit

Constructor.

Parameters

  default_result | The result the matching function will return if none of the rules matched.

## Member Function Documentation

## add_rule() [1/2]

template<typename TResult >

TagsFilterBase & osmium::TagsFilterBase< TResult >::add_rule | ( | const TResult | result,
|  | const TagMatcher & | matcher )

inline

Add a rule to the filter.

Parameters

  result | The result returned when this rule matches.
  matcher | The TagMatcher for checking tags.

Returns
  A reference to this filter for chaining.

## add_rule() [2/2]

template<typename TResult >
template<typename... TArgs>

TagsFilterBase & osmium::TagsFilterBase< TResult >::add_rule | ( | const TResult | result,
|  | TArgs &&... | args )

inline

Add a rule to the filter.

Parameters

  result | The result returned when this rule matches.
  args | Arguments to construct a TagMatcher from that is used for checking tags.

Returns
  A reference to this filter for chaining.

## count()

template<typename TResult >

std::size_t osmium::TagsFilterBase< TResult >::count | ( |  | ) | const

inline noexcept

Return the number of rules in this filter.

Complexity: Constant.

## empty()

template<typename TResult >

bool osmium::TagsFilterBase< TResult >::empty | ( |  | ) | const

inline noexcept

Is this filter empty, ie are there no rules defined?

Complexity: Constant.

## operator()()

template<typename TResult >

TResult osmium::TagsFilterBase< TResult >::operator() | ( | const osmium::Tag & | tag | ) | const

inline noexcept

Matching function. Check the specified tag against the rules.

Parameters

  tag | A tag.

Returns
  The result of the matching rule, or, if none of the rules matched, the default result.

## set_default_result()

template<typename TResult >

void osmium::TagsFilterBase< TResult >::set_default_result | ( | const TResult | default_result | ) |

inline noexcept

Set the default result, the result the matching function will return if none of the rules matched.

## Member Data Documentation

## m_default_result

template<typename TResult >

TResult osmium::TagsFilterBase< TResult >::m_default_result

private

## m_rules

template<typename TResult >

std::vector<std::pair<TResult, TagMatcher> > osmium::TagsFilterBase< TResult >::m_rules

private

The documentation for this class was generated from the following file:

- include/osmium/tags/tags_filter.hpp