File indexing completed on 2024-09-22 04:53:11

0001 /*
0002  * SPDX-FileCopyrightText: 2008 Trevor Pounds
0003  * SPDX-License-Identifier: MIT
0004  */
0005 
0006 #ifndef __MOCKITOPP_MATCHER_EQ_HPP__
0007 #define __MOCKITOPP_MATCHER_EQ_HPP__
0008 
0009 #include <mockitopp/matchers/Matcher.hpp>
0010 #include <string>
0011 
0012 namespace mockitopp
0013 {
0014    namespace matcher
0015    {
0016       namespace detail
0017       {
0018          template <typename T>
0019          struct EqualT : public Matcher<T>
0020          {
0021             EqualT(typename mockitopp::detail::tr1::add_reference<
0022                      typename mockitopp::detail::tr1::add_const<T>::type>::type element)
0023                : element_(element)
0024                {}
0025 
0026             Matcher<T>* clone() const override
0027                { return new EqualT(element_); }
0028 
0029             bool operator== (typename mockitopp::detail::tr1::add_reference<
0030                                        typename mockitopp::detail::tr1::add_const<T>::type>::type rhs) const override
0031                { return element_ == rhs; }
0032 
0033             private:
0034 
0035                T element_;
0036          };
0037       } // namespace detail
0038 
0039       template <typename T>
0040       detail::EqualT<T> equal(typename mockitopp::detail::tr1::add_reference<
0041                                  typename mockitopp::detail::tr1::add_const<T>::type>::type element)
0042          { return detail::EqualT<T>(element); }
0043 
0044       inline detail::EqualT<std::string> equal(const char* element)
0045          { return detail::EqualT<std::string>(element); }
0046    } // namespace matcher
0047 } // namespace mockitopp
0048 
0049 #endif //__MOCKITOPP_MATCHER_EQ_HPP__