1#ifndef OSMIUM_UTIL_STRING_MATCHER_HPP
2#define OSMIUM_UTIL_STRING_MATCHER_HPP
45# if __has_include(<variant>)
47# ifdef __cpp_lib_variant
48# define OSMIUM_USE_STD_VARIANT
53#ifndef OSMIUM_USE_STD_VARIANT
54# include <boost/variant.hpp>
77 static bool match(
const char* )
noexcept {
81 template <
typename TChar,
typename TTraits>
82 void print(std::basic_ostream<TChar, TTraits>& out)
const {
83 out <<
"always_false";
95 static bool match(
const char* )
noexcept {
99 template <
typename TChar,
typename TTraits>
100 void print(std::basic_ostream<TChar, TTraits>& out)
const {
101 out <<
"always_true";
123 bool match(
const char* test_string)
const noexcept {
124 return !std::strcmp(
m_str.c_str(), test_string);
127 template <
typename TChar,
typename TTraits>
128 void print(std::basic_ostream<TChar, TTraits>& out)
const {
129 out <<
"equal[" <<
m_str <<
']';
151 bool match(
const char* test_string)
const noexcept {
152 return m_str.compare(0, std::string::npos, test_string, 0,
m_str.size()) == 0;
155 template <
typename TChar,
typename TTraits>
156 void print(std::basic_ostream<TChar, TTraits>& out)
const {
157 out <<
"prefix[" <<
m_str <<
']';
179 bool match(
const char* test_string)
const noexcept {
180 return std::strstr(test_string,
m_str.c_str()) !=
nullptr;
183 template <
typename TChar,
typename TTraits>
184 void print(std::basic_ostream<TChar, TTraits>& out)
const {
185 out <<
"substring[" <<
m_str <<
']';
203 bool match(
const char* test_string)
const noexcept {
204 return std::regex_search(test_string,
m_regex);
207 template <
typename TChar,
typename TTraits>
208 void print(std::basic_ostream<TChar, TTraits>& out)
const {
225 explicit list(std::vector<std::string> strings) :
239 bool match(
const char* test_string)
const noexcept {
241 [&test_string](
const std::string& s){
242 return s == test_string;
246 template <
typename TChar,
typename TTraits>
247 void print(std::basic_ostream<TChar, TTraits>& out)
const {
250 out <<
'[' << s <<
']';
260#ifdef OSMIUM_USE_STD_VARIANT
276#ifndef OSMIUM_USE_STD_VARIANT
277 :
public boost::static_visitor<bool>
289 template <
typename TMatcher>
291 return t.match(
m_str);
296 template <
typename TChar,
typename TTraits>
298#ifndef OSMIUM_USE_STD_VARIANT
299 :
public boost::static_visitor<void>
303 std::basic_ostream<TChar, TTraits>*
m_out;
311 template <
typename TMatcher>
392 template <
typename TMatcher,
typename X = std::enable_if_t<
393 std::is_base_of<matcher, TMatcher>::value,
void>>
402#ifdef OSMIUM_USE_STD_VARIANT
416 template <
typename TChar,
typename TTraits>
417 void print(std::basic_ostream<TChar, TTraits>& out)
const {
418#ifdef OSMIUM_USE_STD_VARIANT
427 template <
typename TChar,
typename TTraits>
428 inline std::basic_ostream<TChar, TTraits>&
operator<<(std::basic_ostream<TChar, TTraits>& out,
const StringMatcher& matcher) {
435#undef OSMIUM_USE_STD_VARIANT
Definition: string_matcher.hpp:73
static bool match(const char *) noexcept
Definition: string_matcher.hpp:77
void print(std::basic_ostream< TChar, TTraits > &out) const
Definition: string_matcher.hpp:82
Definition: string_matcher.hpp:91
static bool match(const char *) noexcept
Definition: string_matcher.hpp:95
void print(std::basic_ostream< TChar, TTraits > &out) const
Definition: string_matcher.hpp:100
Definition: string_matcher.hpp:109
equal(const char *str)
Definition: string_matcher.hpp:119
std::string m_str
Definition: string_matcher.hpp:111
bool match(const char *test_string) const noexcept
Definition: string_matcher.hpp:123
equal(std::string str)
Definition: string_matcher.hpp:115
void print(std::basic_ostream< TChar, TTraits > &out) const
Definition: string_matcher.hpp:128
Definition: string_matcher.hpp:217
bool match(const char *test_string) const noexcept
Definition: string_matcher.hpp:239
list & add_string(const std::string &str)
Definition: string_matcher.hpp:234
list & add_string(const char *str)
Definition: string_matcher.hpp:229
std::vector< std::string > m_strings
Definition: string_matcher.hpp:219
void print(std::basic_ostream< TChar, TTraits > &out) const
Definition: string_matcher.hpp:247
list(std::vector< std::string > strings)
Definition: string_matcher.hpp:225
Definition: string_matcher.hpp:279
match_visitor(const char *str) noexcept
Definition: string_matcher.hpp:285
const char * m_str
Definition: string_matcher.hpp:281
bool operator()(const TMatcher &t) const noexcept
Definition: string_matcher.hpp:290
Definition: string_matcher.hpp:67
Definition: string_matcher.hpp:137
void print(std::basic_ostream< TChar, TTraits > &out) const
Definition: string_matcher.hpp:156
bool match(const char *test_string) const noexcept
Definition: string_matcher.hpp:151
prefix(std::string str)
Definition: string_matcher.hpp:143
std::string m_str
Definition: string_matcher.hpp:139
prefix(const char *str)
Definition: string_matcher.hpp:147
Definition: string_matcher.hpp:301
print_visitor(std::basic_ostream< TChar, TTraits > &out)
Definition: string_matcher.hpp:307
std::basic_ostream< TChar, TTraits > * m_out
Definition: string_matcher.hpp:303
void operator()(const TMatcher &t) const noexcept
Definition: string_matcher.hpp:312
Definition: string_matcher.hpp:193
regex(std::regex regex)
Definition: string_matcher.hpp:199
bool match(const char *test_string) const noexcept
Definition: string_matcher.hpp:203
void print(std::basic_ostream< TChar, TTraits > &out) const
Definition: string_matcher.hpp:208
std::regex m_regex
Definition: string_matcher.hpp:195
Definition: string_matcher.hpp:165
std::string m_str
Definition: string_matcher.hpp:167
void print(std::basic_ostream< TChar, TTraits > &out) const
Definition: string_matcher.hpp:184
bool match(const char *test_string) const noexcept
Definition: string_matcher.hpp:179
substring(std::string str)
Definition: string_matcher.hpp:171
substring(const char *str)
Definition: string_matcher.hpp:175
Definition: string_matcher.hpp:62
StringMatcher()
Definition: string_matcher.hpp:323
StringMatcher(const std::vector< std::string > &strings)
Definition: string_matcher.hpp:380
StringMatcher(const std::regex &aregex)
Definition: string_matcher.hpp:369
StringMatcher(const char *str)
Definition: string_matcher.hpp:349
bool operator()(const char *str) const noexcept
Definition: string_matcher.hpp:401
void print(std::basic_ostream< TChar, TTraits > &out) const
Definition: string_matcher.hpp:417
bool operator()(const std::string &str) const noexcept
Definition: string_matcher.hpp:412
matcher_type m_matcher
Definition: string_matcher.hpp:273
StringMatcher(TMatcher &&matcher)
Definition: string_matcher.hpp:394
StringMatcher(bool result)
Definition: string_matcher.hpp:336
StringMatcher(const std::string &str)
Definition: string_matcher.hpp:359
boost::variant< always_false, always_true, equal, prefix, substring, regex, list > matcher_type
Definition: string_matcher.hpp:271
Namespace for everything in the Osmium library.
Definition: assembler.hpp:53
std::basic_ostream< TChar, TTraits > & operator<<(std::basic_ostream< TChar, TTraits > &out, const item_type item_type)
Definition: item_type.hpp:187
Definition: location.hpp:555