#pragma once #include #include #include #include namespace ProfileEvents { extern const Event RegexpCreated; } namespace DB { namespace Regexps { using Regexp = OptimizedRegularExpressionImpl; using Pool = ObjectPoolMap; template inline Regexp createRegexp(const std::string & pattern, int flags) { return {pattern, flags}; } template <> inline Regexp createRegexp(const std::string & pattern, int flags) { return {likePatternToRegexp(pattern), flags}; } template inline Pool::Pointer get(const std::string & pattern) { /// C++11 has thread-safe function-local statics on most modern compilers. static Pool known_regexps; /// Разные переменные для разных параметров шаблона. return known_regexps.get(pattern, [&pattern] { int flags = OptimizedRegularExpression::RE_DOT_NL; if (no_capture) flags |= OptimizedRegularExpression::RE_NO_CAPTURE; ProfileEvents::increment(ProfileEvents::RegexpCreated); return new Regexp{createRegexp(pattern, flags)}; }); } } }