// (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) // See http://www.boost.org/libs/test for the library home page. // /// @file /// Defines single element monomorphic dataset // *************************************************************************** #ifndef BOOST_TEST_DATA_MONOMORPHIC_SINGLETON_HPP_102211GER #define BOOST_TEST_DATA_MONOMORPHIC_SINGLETON_HPP_102211GER // Boost.Test #include #include #include //____________________________________________________________________________// namespace boost { namespace unit_test { namespace data { namespace monomorphic { // ************************************************************************** // // ************** singleton ************** // // ************************************************************************** // /// Models a single element data set template class singleton { private: typedef typename boost::decay::type sample; public: enum { arity = 1 }; struct iterator { // Constructor explicit iterator( singleton const* owner ) : m_owner( owner ) {} // forward iterator interface sample const& operator*() const { return m_owner->value(); } void operator++() {} private: singleton const* m_owner; }; //! Constructor explicit singleton( T&& value ) : m_value( std::forward( value ) ) {} //! Move constructor singleton( singleton&& s ) : m_value( std::forward( s.m_value ) ) {} //! Value access method T const& value() const { return m_value; } //! 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 struct is_dataset> : mpl::true_ {}; //____________________________________________________________________________// } // namespace monomorphic /// @overload boost::unit_test::data::make() template inline typename std::enable_if::value && !monomorphic::is_dataset::value && !boost::is_array::type>::value, monomorphic::singleton >::type make( T&& v ) { return monomorphic::singleton( std::forward( v ) ); } //____________________________________________________________________________// /// @overload boost::unit_test::data::make inline monomorphic::singleton make( char* str ) { return monomorphic::singleton( std::move(str) ); } //____________________________________________________________________________// /// @overload boost::unit_test::data::make inline monomorphic::singleton make( char const* str ) { return monomorphic::singleton( std::move(str) ); } } // namespace data } // namespace unit_test } // namespace boost #include #endif // BOOST_TEST_DATA_MONOMORPHIC_SINGLETON_HPP_102211GER