x
Yes
No
Do you want to visit DriveHQ English website?
Inicio
Características
Precios
Prueba gratuita
Software cliente
Acerca de nosotros
Servidor de archivos
|
Solución de copias de seguridad
|
Servidor FTP
|
Servidor de correo electrónico
|
Alojamiento web
|
Software cliente
Servidor de archivos
Solución de copia de seguridad
Servidor FTP
Servidor de correo electrónico
Alojamiento web
Software cliente
argument_factory.hpp - Hosted on DriveHQ Cloud IT Platform
Arriba
Subir
Descargar
Compartir
Publicar
Nueva carpeta
Nuevo archivo
Copiar
Cortar
Eliminar
Pegar
Clasificación
Actualizar
Ruta de la carpeta: \\game3dprogramming\materials\GameFactory\GameFactoryDemo\references\boost_1_35_0\boost\test\utils\runtime\cla\argument_factory.hpp
Girar
Efecto
Propiedad
Historial
// (C) Copyright Gennadiy Rozental 2005-2007. // Use, modification, and distribution are subject to 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: 43798 $ // // Description : generic typed_argument_factory implementation // *************************************************************************** #ifndef BOOST_RT_CLA_ARGUMENT_FACTORY_HPP_062604GER #define BOOST_RT_CLA_ARGUMENT_FACTORY_HPP_062604GER // Boost.Runtime.Parameter #include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
// Boost.Test #include
// Boost #include
namespace boost { namespace BOOST_RT_PARAM_NAMESPACE { namespace cla { // ************************************************************************** // // ************** default_value_interpreter ************** // // ************************************************************************** // namespace rt_cla_detail { struct default_value_interpreter { template
void operator()( argv_traverser& tr, boost::optional
& value ) { if( interpret_argument_value( tr.token(), value, 0 ) ) tr.next_token(); } }; } // namespace rt_cla_detail // ************************************************************************** // // ************** typed_argument_factory ************** // // ************************************************************************** // template
struct typed_argument_factory : public argument_factory { // Constructor typed_argument_factory() : m_value_interpreter( rt_cla_detail::default_value_interpreter() ) {} BOOST_RT_PARAM_UNNEEDED_VIRTUAL ~typed_argument_factory() {} // properties modification template
void accept_modifier( Modifier const& m ) { optionally_assign( m_value_handler, m, handler ); optionally_assign( m_value_interpreter, m, interpreter ); if( m.has( default_value ) ) { BOOST_RT_PARAM_VALIDATE_LOGIC( !m_value_generator, BOOST_RT_PARAM_LITERAL( "multiple value generators for parameter" ) ); T const& dv_ref = m[default_value]; m_value_generator = rt_cla_detail::const_generator
( dv_ref ); } if( m.has( default_refer_to ) ) { BOOST_RT_PARAM_VALIDATE_LOGIC( !m_value_generator, BOOST_RT_PARAM_LITERAL( "multiple value generators for parameter" ) ); cstring ref_id = m[default_refer_to]; m_value_generator = rt_cla_detail::ref_generator
( ref_id ); } if( m.has( assign_to ) ) { BOOST_RT_PARAM_VALIDATE_LOGIC( !m_value_handler, BOOST_RT_PARAM_LITERAL( "multiple value handlers for parameter" ) ); m_value_handler = rt_cla_detail::assigner
( m[assign_to] ); } } // Argument factory implementation virtual argument_ptr produce_using( parameter& p, argv_traverser& tr ); virtual argument_ptr produce_using( parameter& p, parser const& ); virtual void argument_usage_info( format_stream& fs ); // !! private? // Data members unit_test::callback2
m_value_handler; unit_test::callback2
&> m_value_generator; unit_test::callback2
&> m_value_interpreter; }; //____________________________________________________________________________// template
inline argument_ptr typed_argument_factory
::produce_using( parameter& p, argv_traverser& tr ) { boost::optional
value; try { m_value_interpreter( tr, value ); } catch( ... ) { // !! should we do that? BOOST_RT_PARAM_TRACE( "Fail to parse argument value" ); if( !p.p_optional_value ) throw; } argument_ptr arg = p.actual_argument(); BOOST_RT_CLA_VALIDATE_INPUT( !!value || p.p_optional_value, tr, BOOST_RT_PARAM_LITERAL( "Argument value missing for parameter " ) << p.id_2_report() ); BOOST_RT_CLA_VALIDATE_INPUT( !arg || p.p_multiplicable, tr, BOOST_RT_PARAM_LITERAL( "Unexpected repetition of the parameter " ) << p.id_2_report() ); if( !!value && !!m_value_handler ) m_value_handler( p, *value ); if( !p.p_multiplicable ) arg.reset( p.p_optional_value ? (argument*)new typed_argument
>( p, value ) : (argument*)new typed_argument
( p, *value ) ); else { typedef std::list
> optional_list; if( !arg ) arg.reset( p.p_optional_value ? (argument*)new typed_argument
( p ) : (argument*)new typed_argument
>( p ) ); if( p.p_optional_value ) { optional_list& values = arg_value
( *arg ); values.push_back( value ); } else { std::list
& values = arg_value
>( *arg ); values.push_back( *value ); } } return arg; } //____________________________________________________________________________// template
inline argument_ptr typed_argument_factory
::produce_using( parameter& p, parser const& pa ) { argument_ptr arg; if( !m_value_generator ) return arg; boost::optional
value; m_value_generator( pa, value ); if( !value ) return arg; if( !!m_value_handler ) m_value_handler( p, *value ); arg.reset( new typed_argument
( p, *value ) ); return arg; } //____________________________________________________________________________// template
inline void typed_argument_factory
::argument_usage_info( format_stream& fs ) { rt_cla_detail::argument_value_usage( fs, 0, (T*)0 ); } //____________________________________________________________________________// } // namespace boost } // namespace BOOST_RT_PARAM_NAMESPACE } // namespace cla #endif // BOOST_RT_CLA_ARGUMENT_FACTORY_HPP_062604GER
argument_factory.hpp
Dirección de la página
Dirección del archivo
Anterior 1/30
Siguiente
Descargar
( 7 KB )
Comments
Total ratings:
0
Average rating:
No clasificado
of 10
Would you like to comment?
Join now
, or
Logon
if you are already a member.