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 static bool match(
const char* ) noexcept {
92 template <
typename TChar,
typename TTraits>
93 void print(std::basic_ostream<TChar, TTraits>& out)
const {
94 out <<
"always_false";
106 static bool match(
const char* ) 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) {
Definition: string_matcher.hpp:84
static bool match(const char *) noexcept
Definition: string_matcher.hpp:88
void print(std::basic_ostream< TChar, TTraits > &out) const
Definition: string_matcher.hpp:93
Definition: string_matcher.hpp:102
static bool match(const char *) noexcept
Definition: string_matcher.hpp:106
void print(std::basic_ostream< TChar, TTraits > &out) const
Definition: string_matcher.hpp:111
Definition: string_matcher.hpp:120
equal(const char *str)
Definition: string_matcher.hpp:130
std::string m_str
Definition: string_matcher.hpp:122
bool match(const char *test_string) const noexcept
Definition: string_matcher.hpp:134
equal(std::string str)
Definition: string_matcher.hpp:126
void print(std::basic_ostream< TChar, TTraits > &out) const
Definition: string_matcher.hpp:139
Definition: string_matcher.hpp:230
bool match(const char *test_string) const noexcept
Definition: string_matcher.hpp:252
list & add_string(const std::string &str)
Definition: string_matcher.hpp:247
std::vector< std::string > m_strings
Definition: string_matcher.hpp:232
list & add_string(const char *str)
Definition: string_matcher.hpp:242
void print(std::basic_ostream< TChar, TTraits > &out) const
Definition: string_matcher.hpp:263
list(std::vector< std::string > strings)
Definition: string_matcher.hpp:238
Definition: string_matcher.hpp:287
match_visitor(const char *str) noexcept
Definition: string_matcher.hpp:293
const char * m_str
Definition: string_matcher.hpp:289
bool operator()(const TMatcher &t) const noexcept
Definition: string_matcher.hpp:298
Definition: string_matcher.hpp:78
Definition: string_matcher.hpp:148
void print(std::basic_ostream< TChar, TTraits > &out) const
Definition: string_matcher.hpp:167
bool match(const char *test_string) const noexcept
Definition: string_matcher.hpp:162
prefix(std::string str)
Definition: string_matcher.hpp:154
std::string m_str
Definition: string_matcher.hpp:150
prefix(const char *str)
Definition: string_matcher.hpp:158
Definition: string_matcher.hpp:305
print_visitor(std::basic_ostream< TChar, TTraits > &out)
Definition: string_matcher.hpp:311
std::basic_ostream< TChar, TTraits > * m_out
Definition: string_matcher.hpp:307
void operator()(const TMatcher &t) const noexcept
Definition: string_matcher.hpp:316
Definition: string_matcher.hpp:176
std::string m_str
Definition: string_matcher.hpp:178
void print(std::basic_ostream< TChar, TTraits > &out) const
Definition: string_matcher.hpp:195
bool match(const char *test_string) const noexcept
Definition: string_matcher.hpp:190
substring(std::string str)
Definition: string_matcher.hpp:182
substring(const char *str)
Definition: string_matcher.hpp:186
Definition: string_matcher.hpp:73
StringMatcher()
Definition: string_matcher.hpp:327
StringMatcher(const std::vector< std::string > &strings)
Definition: string_matcher.hpp:381
StringMatcher(const char *str)
Definition: string_matcher.hpp:351
bool operator()(const char *str) const noexcept
Definition: string_matcher.hpp:401
boost::variant< always_false, always_true, equal, prefix, substring, list > matcher_type
Definition: string_matcher.hpp:283
void print(std::basic_ostream< TChar, TTraits > &out) const
Definition: string_matcher.hpp:413
bool operator()(const std::string &str) const noexcept
Definition: string_matcher.hpp:408
matcher_type m_matcher
Definition: string_matcher.hpp:285
StringMatcher(TMatcher &&matcher)
Definition: string_matcher.hpp:394
StringMatcher(bool result)
Definition: string_matcher.hpp:339
StringMatcher(const std::string &str)
Definition: string_matcher.hpp:360
type
Definition: entity_bits.hpp:63
Namespace for everything in the Osmium library.
Definition: assembler.hpp:53
std::basic_ostream< TChar, TTraits > & operator<<(std::basic_ostream< TChar, TTraits > &out, const osmium::Box &box)
Definition: box.hpp:224
Definition: location.hpp:551