1 // (C) Copyright Gennadiy Rozental 2005-2008. 2 // Use, modification, and distribution are subject to the 3 // Boost Software License, Version 1.0. (See accompanying file 4 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 5 6 // See http://www.boost.org/libs/test for the library home page. 7 // 8 // File : $RCSfile$ 9 // 10 // Version : $Revision: 49312 $ 11 // 12 // Description : defines model of named parameter 13 // *************************************************************************** 14 15 #ifndef BOOST_RT_CLA_NAMED_PARAMETER_HPP_062604GER 16 #define BOOST_RT_CLA_NAMED_PARAMETER_HPP_062604GER 17 18 // Boost.Runtime.Parameter 19 #include <boost/test/utils/runtime/config.hpp> 20 21 #include <boost/test/utils/runtime/cla/basic_parameter.hpp> 22 #include <boost/test/utils/runtime/cla/id_policy.hpp> 23 24 namespace boost { 25 26 namespace BOOST_RT_PARAM_NAMESPACE { 27 28 namespace cla { 29 30 // ************************************************************************** // 31 // ************** string_name_policy ************** // 32 // ************************************************************************** // 33 34 class string_name_policy : public basic_naming_policy { 35 public: 36 // Constructor 37 string_name_policy(); ~string_name_policy()38 BOOST_RT_PARAM_UNNEEDED_VIRTUAL ~string_name_policy() {} 39 40 // policy interface 41 virtual bool responds_to( cstring name ) const; 42 virtual bool conflict_with( identification_policy const& ) const; 43 44 // Accept modifier 45 template<typename Modifier> accept_modifier(Modifier const & m)46 void accept_modifier( Modifier const& m ) 47 { 48 basic_naming_policy::accept_modifier( m ); 49 50 if( m.has( guess_name_m ) ) 51 m_guess_name = true; 52 } 53 54 private: 55 // Naming policy interface 56 virtual bool match_name( argv_traverser& tr ) const; 57 58 // Data members 59 bool m_guess_name; 60 }; 61 62 // ************************************************************************** // 63 // ************** runtime::cla::named_parameter ************** // 64 // ************************************************************************** // 65 66 template<typename T> 67 class named_parameter_t : public basic_parameter<T,string_name_policy> { 68 typedef basic_parameter<T,string_name_policy> base; 69 public: 70 // Constructors named_parameter_t(cstring name)71 explicit named_parameter_t( cstring name ) : base( name ) {} 72 }; 73 74 //____________________________________________________________________________// 75 76 BOOST_RT_CLA_NAMED_PARAM_GENERATORS( named_parameter ) 77 78 //____________________________________________________________________________// 79 80 } // namespace cla 81 82 } // namespace BOOST_RT_PARAM_NAMESPACE 83 84 } // namespace boost 85 86 #ifndef BOOST_RT_PARAM_OFFLINE 87 88 # define BOOST_RT_PARAM_INLINE inline 89 # include <boost/test/utils/runtime/cla/named_parameter.ipp> 90 91 #endif 92 93 #endif // BOOST_RT_CLA_NAMED_PARAMETER_HPP_062604GER 94