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__