File indexing completed on 2024-06-23 05:21:36
0001 /* 0002 * SPDX-FileCopyrightText: 2008 Trevor Pounds 0003 * SPDX-License-Identifier: MIT 0004 */ 0005 0006 #ifndef __MOCKITOPP_MATCHER_REGEX_HPP__ 0007 #define __MOCKITOPP_MATCHER_REGEX_HPP__ 0008 0009 #include <mockitopp/matchers/Matcher.hpp> 0010 0011 namespace mockitopp 0012 { 0013 namespace matcher 0014 { 0015 namespace detail 0016 { 0017 #if defined(BOOST_RE_REGEX_HPP) 0018 namespace __tr1 = ::boost; 0019 #elif defined(_GLIBCXX_TR1_REGEX) || defined(_REGEX_) 0020 namespace __tr1 = ::std::tr1; 0021 #elif defined(_GLIBCXX_REGEX) 0022 namespace __tr1 = ::std; 0023 #else 0024 #error compatible tr1 regex header not found! 0025 #endif 0026 0027 template <typename T> 0028 struct RegexT : public Matcher<T> 0029 { 0030 RegexT(typename mockitopp::detail::tr1::add_reference<typename mockitopp::detail::tr1::add_const<T>::type>::type expr) 0031 : expr_(expr) 0032 {} 0033 0034 virtual Matcher<T>* clone() const 0035 { return new RegexT(expr_); } 0036 0037 virtual bool operator== (typename mockitopp::detail::tr1::add_reference<typename mockitopp::detail::tr1::add_const<T>::type>::type rhs) const 0038 { return __tr1::regex_match(rhs, expr_); } 0039 0040 private: 0041 0042 __tr1::regex expr_; 0043 0044 RegexT(const __tr1::regex& expr) 0045 : expr_(expr) 0046 {} 0047 }; 0048 } // namespace detail 0049 0050 template <typename T> 0051 detail::RegexT<T> regex(T expr) 0052 { return detail::RegexT<T>(expr); } 0053 } // namespace matcher 0054 } // namespace mockitopp 0055 0056 #endif //__MOCKITOPP_MATCHER_REGEX_HPP__