diff options
Diffstat (limited to 'boost/test/data/monomorphic/singleton.hpp')
-rw-r--r-- | boost/test/data/monomorphic/singleton.hpp | 84 |
1 files changed, 33 insertions, 51 deletions
diff --git a/boost/test/data/monomorphic/singleton.hpp b/boost/test/data/monomorphic/singleton.hpp index 4d305c2546..586487a6d7 100644 --- a/boost/test/data/monomorphic/singleton.hpp +++ b/boost/test/data/monomorphic/singleton.hpp @@ -1,4 +1,4 @@ -// (C) Copyright Gennadiy Rozental 2011-2014. +// (C) Copyright Gennadiy Rozental 2001. // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) @@ -14,7 +14,7 @@ // Boost.Test #include <boost/test/data/config.hpp> -#include <boost/test/data/monomorphic/dataset.hpp> +#include <boost/test/data/monomorphic/fwd.hpp> #include <boost/test/detail/suppress_warnings.hpp> @@ -31,102 +31,84 @@ namespace monomorphic { /// Models a single element data set template<typename T> -class singleton : public monomorphic::dataset<typename boost::decay<T>::type> { - typedef monomorphic::dataset<typename boost::decay<T>::type> base; - typedef typename base::iter_ptr iter_ptr; +class singleton { +public: + typedef typename boost::decay<T>::type sample; + + enum { arity = 1 }; - struct iterator : public base::iterator { + struct iterator { // Constructor - explicit iterator( singleton<T> const& owner ) + explicit iterator( singleton<T> const* owner ) : m_owner( owner ) {} // forward iterator interface - virtual typename base::data_type const& - operator*() { return m_owner.value(); } - virtual void operator++() {} + sample const& operator*() const { return m_owner->value(); } + void operator++() {} private: - singleton<T> const& m_owner; + singleton<T> const* m_owner; }; -public: - enum { arity = 1 }; - -#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES //! Constructor - explicit singleton( T&& value ) : m_value( std::forward<T>( value ) ) {} + explicit singleton( T&& value ) : m_value( std::forward<T>( value ) ) {} //! Move constructor singleton( singleton&& s ) : m_value( std::forward<T>( s.m_value ) ) {} -#else - // Constructor - explicit singleton( T const& value ) : m_value( value ) {} -#endif - // Access methods - T const& value() const { return m_value; } + //! Value access method + T const& value() const { return m_value; } - // dataset interface - virtual data::size_t size() const { return 1; } - virtual iter_ptr begin() const { return boost::make_shared<iterator>( *this ); } + //! dataset interface + data::size_t size() const { return 1; } + iterator begin() const { return iterator( this ); } private: // Data members T m_value; }; +//____________________________________________________________________________// + // a singleton is a dataset template<typename T> -struct is_dataset<singleton<T> > : mpl::true_ {}; - -} // namespace monomorphic +struct is_dataset<singleton<T>> : mpl::true_ {}; +//____________________________________________________________________________// +} // namespace monomorphic /// @overload boost::unit_test::data::make() template<typename T> -inline typename BOOST_TEST_ENABLE_IF<!is_forward_iterable<T>::value && - !monomorphic::is_dataset<T>::value && - !boost::is_array< typename boost::remove_reference<T>::type >::value, - monomorphic::singleton<T> +inline typename std::enable_if<!is_forward_iterable<T>::value && + !monomorphic::is_dataset<T>::value && + !boost::is_array<typename boost::remove_reference<T>::type>::value, + monomorphic::singleton<T> >::type -#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES make( T&& v ) { return monomorphic::singleton<T>( std::forward<T>( v ) ); } -#else -make( T const& v ) -{ - return monomorphic::singleton<T>( v ); -} -#endif +//____________________________________________________________________________// /// @overload boost::unit_test::data::make -inline monomorphic::singleton<char*> make( char* str ) +inline monomorphic::singleton<char*> +make( char* str ) { -#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES return monomorphic::singleton<char*>( std::move(str) ); -#else - return monomorphic::singleton<char*>( str ); -#endif } +//____________________________________________________________________________// /// @overload boost::unit_test::data::make -inline monomorphic::singleton<char const*> make( char const* str ) +inline monomorphic::singleton<char const*> +make( char const* str ) { -#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES return monomorphic::singleton<char const*>( std::move(str) ); -#else - return monomorphic::singleton<char const*>( str ); -#endif } - - } // namespace data } // namespace unit_test } // namespace boost |