123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- // (C) Copyright Gennadiy Rozental 2005-2008.
- // 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 : $RCSfile$
- //
- // Version : $Revision: 57992 $
- //
- // Description : model of actual argument (both typed and abstract interface)
- // ***************************************************************************
- #ifndef BOOST_RT_ARGUMENT_HPP_062604GER
- #define BOOST_RT_ARGUMENT_HPP_062604GER
- // Boost.Runtime.Parameter
- #include <boost/test/utils/runtime/config.hpp>
- #include <boost/test/utils/runtime/fwd.hpp>
- #include <boost/test/utils/runtime/validation.hpp>
- // Boost.Test
- #include <boost/test/utils/class_properties.hpp>
- #include <boost/test/utils/rtti.hpp>
- // STL
- #include <cassert>
- namespace boost {
- namespace BOOST_RT_PARAM_NAMESPACE {
- // ************************************************************************** //
- // ************** runtime::argument ************** //
- // ************************************************************************** //
- #ifdef BOOST_MSVC
- # pragma warning(push)
- # pragma warning(disable:4244)
- #endif
- class argument {
- public:
- // Constructor
- argument( parameter const& p, rtti::id_t value_type )
- : p_formal_parameter( p )
- , p_value_type( value_type )
- {}
- // Destructor
- virtual ~argument() {}
- // Public properties
- unit_test::readonly_property<parameter const&> p_formal_parameter;
- unit_test::readonly_property<rtti::id_t> p_value_type;
- };
- // ************************************************************************** //
- // ************** runtime::typed_argument ************** //
- // ************************************************************************** //
- template<typename T>
- class typed_argument : public argument {
- public:
- // Constructor
- explicit typed_argument( parameter const& p )
- : argument( p, rtti::type_id<T>() )
- {}
- typed_argument( parameter const& p, T const& t )
- : argument( p, rtti::type_id<T>() )
- , p_value( t )
- {}
- unit_test::readwrite_property<T> p_value;
- };
- // ************************************************************************** //
- // ************** runtime::arg_value ************** //
- // ************************************************************************** //
- template<typename T>
- inline T const&
- arg_value( argument const& arg_ )
- {
- assert( arg_.p_value_type == rtti::type_id<T>() ); // detect logic error
- return static_cast<typed_argument<T> const&>( arg_ ).p_value.value;
- }
- //____________________________________________________________________________//
- template<typename T>
- inline T&
- arg_value( argument& arg_ )
- {
- assert( arg_.p_value_type == rtti::type_id<T>() ); // detect logic error
- return static_cast<typed_argument<T>&>( arg_ ).p_value.value;
- }
- #ifdef BOOST_MSVC
- # pragma warning(pop)
- #endif
- //____________________________________________________________________________//
- } // namespace BOOST_RT_PARAM_NAMESPACE
- } // namespace boost
- #endif // BOOST_RT_ARGUMENT_HPP_062604GER
|