Libosmium
2.15.1
Fast and flexible C++ library for working with OpenStreetMap data
|
Go to the documentation of this file. 1 #ifndef OSMIUM_UTIL_STRING_MATCHER_HPP
2 #define OSMIUM_UTIL_STRING_MATCHER_HPP
36 #include <boost/variant.hpp>
51 #if defined(__GLIBCXX__)
52 # if ((__cplusplus >= 201402L) || \
53 defined(_GLIBCXX_REGEX_DFS_QUANTIFIERS_LIMIT) || \
54 defined(_GLIBCXX_REGEX_STATE_LIMIT))
55 # define OSMIUM_WITH_REGEX
57 # pragma message("Disabling regex functionality. See source code for info.")
59 #elif defined(__clang__)
60 # if ((__clang_major__ > 3) || \
61 (__clang_minor__ == 3 && __clang_minor__ > 5))
62 # define OSMIUM_WITH_REGEX
64 # pragma message("Disabling regex functionality")
88 bool match(
const char* )
const noexcept {
92 template <
typename TChar,
typename TTraits>
93 void print(std::basic_ostream<TChar, TTraits>& out)
const {
94 out <<
"always_false";
106 bool match(
const char* )
const noexcept {
110 template <
typename TChar,
typename TTraits>
111 void print(std::basic_ostream<TChar, TTraits>& out)
const {
112 out <<
"always_true";
134 bool match(
const char* test_string)
const noexcept {
135 return !std::strcmp(
m_str.c_str(), test_string);
138 template <
typename TChar,
typename TTraits>
139 void print(std::basic_ostream<TChar, TTraits>& out)
const {
140 out <<
"equal[" <<
m_str <<
']';
162 bool match(
const char* test_string)
const noexcept {
163 return m_str.compare(0, std::string::npos, test_string, 0,
m_str.size()) == 0;
166 template <
typename TChar,
typename TTraits>
167 void print(std::basic_ostream<TChar, TTraits>& out)
const {
168 out <<
"prefix[" <<
m_str <<
']';
190 bool match(
const char* test_string)
const noexcept {
191 return std::strstr(test_string,
m_str.c_str()) !=
nullptr;
194 template <
typename TChar,
typename TTraits>
195 void print(std::basic_ostream<TChar, TTraits>& out)
const {
196 out <<
"substring[" <<
m_str <<
']';
201 #ifdef OSMIUM_WITH_REGEX
205 class regex :
public matcher {
211 explicit regex(std::regex regex) :
212 m_regex(
std::move(regex)) {
215 bool match(
const char* test_string)
const noexcept {
216 return std::regex_search(test_string, m_regex);
219 template <
typename TChar,
typename TTraits>
220 void print(std::basic_ostream<TChar, TTraits>& out)
const {
238 explicit list(std::vector<std::string> strings) :
252 bool match(
const char* test_string)
const noexcept {
254 if (!std::strcmp(s.c_str(), test_string)) {
262 template <
typename TChar,
typename TTraits>
263 void print(std::basic_ostream<TChar, TTraits>& out)
const {
266 out <<
'[' << s <<
']';
280 #ifdef OSMIUM_WITH_REGEX
297 template <
typename TMatcher>
299 return t.match(
m_str);
304 template <
typename TChar,
typename TTraits>
307 std::basic_ostream<TChar, TTraits>*
m_out;
315 template <
typename TMatcher>
364 #ifdef OSMIUM_WITH_REGEX
392 template <
typename TMatcher,
typename X =
typename std::enable_if<
393 std::is_base_of<matcher, TMatcher>::value,
void>
::type>
412 template <
typename TChar,
typename TTraits>
413 void print(std::basic_ostream<TChar, TTraits>& out)
const {
419 template <
typename TChar,
typename TTraits>
420 inline std::basic_ostream<TChar, TTraits>&
operator<<(std::basic_ostream<TChar, TTraits>& out,
const StringMatcher& matcher) {
427 #endif // OSMIUM_UTIL_STRING_MATCHER_HPP
StringMatcher(const char *str)
Definition: string_matcher.hpp:351
std::string m_str
Definition: string_matcher.hpp:122
equal(std::string str)
Definition: string_matcher.hpp:126
Definition: string_matcher.hpp:120
boost::variant< always_false, always_true, equal, prefix, substring, list > matcher_type
Definition: string_matcher.hpp:283
Definition: string_matcher.hpp:230
equal(const char *str)
Definition: string_matcher.hpp:130
Definition: string_matcher.hpp:102
StringMatcher(TMatcher &&matcher)
Definition: string_matcher.hpp:394
bool match(const char *test_string) const noexcept
Definition: string_matcher.hpp:190
matcher_type m_matcher
Definition: string_matcher.hpp:285
print_visitor(std::basic_ostream< TChar, TTraits > &out)
Definition: string_matcher.hpp:311
StringMatcher()
Definition: string_matcher.hpp:327
std::string m_str
Definition: string_matcher.hpp:178
Definition: string_matcher.hpp:305
bool match(const char *) const noexcept
Definition: string_matcher.hpp:106
Definition: string_matcher.hpp:176
const char * m_str
Definition: string_matcher.hpp:289
StringMatcher(const std::string &str)
Definition: string_matcher.hpp:360
void print(std::basic_ostream< TChar, TTraits > &out) const
Definition: string_matcher.hpp:93
bool operator()(const TMatcher &t) const noexcept
Definition: string_matcher.hpp:298
void print(std::basic_ostream< TChar, TTraits > &out) const
Definition: string_matcher.hpp:111
substring(std::string str)
Definition: string_matcher.hpp:182
void print(std::basic_ostream< TChar, TTraits > &out) const
Definition: string_matcher.hpp:263
bool operator()(const char *str) const noexcept
Definition: string_matcher.hpp:401
substring(const char *str)
Definition: string_matcher.hpp:186
Namespace for everything in the Osmium library.
Definition: assembler.hpp:53
StringMatcher(bool result)
Definition: string_matcher.hpp:339
std::string m_str
Definition: string_matcher.hpp:150
Definition: string_matcher.hpp:287
bool operator()(const std::string &str) const noexcept
Definition: string_matcher.hpp:408
list & add_string(const char *str)
Definition: string_matcher.hpp:242
void print(std::basic_ostream< TChar, TTraits > &out) const
Definition: string_matcher.hpp:167
match_visitor(const char *str) noexcept
Definition: string_matcher.hpp:293
bool match(const char *) const noexcept
Definition: string_matcher.hpp:88
void operator()(const TMatcher &t) const noexcept
Definition: string_matcher.hpp:316
list & add_string(const std::string &str)
Definition: string_matcher.hpp:247
prefix(std::string str)
Definition: string_matcher.hpp:154
bool match(const char *test_string) const noexcept
Definition: string_matcher.hpp:134
std::basic_ostream< TChar, TTraits > * m_out
Definition: string_matcher.hpp:307
std::basic_ostream< TChar, TTraits > & operator<<(std::basic_ostream< TChar, TTraits > &out, const osmium::Box &box)
Definition: box.hpp:224
Definition: location.hpp:550
Definition: string_matcher.hpp:148
list(std::vector< std::string > strings)
Definition: string_matcher.hpp:238
StringMatcher(const std::vector< std::string > &strings)
Definition: string_matcher.hpp:381
void print(std::basic_ostream< TChar, TTraits > &out) const
Definition: string_matcher.hpp:139
std::vector< std::string > m_strings
Definition: string_matcher.hpp:232
void print(std::basic_ostream< TChar, TTraits > &out) const
Definition: string_matcher.hpp:195
void print(std::basic_ostream< TChar, TTraits > &out) const
Definition: string_matcher.hpp:413
bool match(const char *test_string) const noexcept
Definition: string_matcher.hpp:252
Definition: string_matcher.hpp:73
bool match(const char *test_string) const noexcept
Definition: string_matcher.hpp:162
Definition: string_matcher.hpp:84
type
Definition: entity_bits.hpp:63
prefix(const char *str)
Definition: string_matcher.hpp:158
Definition: string_matcher.hpp:78