1 // (C) Copyright Gennadiy Rozental 2005. 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: id_policy.hpp,v $ 9 // 10 // Version : $Revision: 1.1.1.1 $ 11 // 12 // Description : some generic identification policies definition 13 // *************************************************************************** 14 15 #ifndef BOOST_RT_CLA_ID_POLICY_HPP_062604GER 16 #define BOOST_RT_CLA_ID_POLICY_HPP_062604GER 17 18 // Boost.Runtime.Parameter 19 #include <boost/test/utils/runtime/config.hpp> 20 21 #include <boost/test/utils/runtime/cla/fwd.hpp> 22 #include <boost/test/utils/runtime/cla/modifier.hpp> 23 #include <boost/test/utils/runtime/cla/argv_traverser.hpp> 24 25 #include <boost/test/utils/runtime/cla/iface/id_policy.hpp> 26 27 // Boost.Test 28 #include <boost/test/utils/class_properties.hpp> 29 #include <boost/test/utils/rtti.hpp> 30 31 namespace boost { 32 33 namespace BOOST_RT_PARAM_NAMESPACE { 34 35 namespace cla { 36 37 // ************************************************************************** // 38 // ************** naming_policy_base ************** // 39 // ************************************************************************** // 40 // model: <prefix> <name> <separtor> 41 42 class basic_naming_policy : public identification_policy { 43 public: 44 // Policy interface responds_to(cstring name) const45 virtual bool responds_to( cstring name ) const { return m_name == name; } id_2_report() const46 virtual cstring id_2_report() const { return m_name; } 47 virtual void usage_info( format_stream& fs ) const; 48 virtual bool matching( parameter const& p, argv_traverser& tr, bool primary ) const; 49 50 // Accept modifer 51 template<typename Modifier> accept_modifier(Modifier const & m)52 void accept_modifier( Modifier const& m ) 53 { 54 nfp::optionally_assign( m_prefix, m, prefix ); 55 nfp::optionally_assign( m_name, m, name ); 56 nfp::optionally_assign( m_separator, m, separator ); 57 } 58 59 protected: basic_naming_policy(rtti::id_t const & dyn_type)60 explicit basic_naming_policy( rtti::id_t const& dyn_type ) 61 : identification_policy( dyn_type ) 62 {} ~basic_naming_policy()63 BOOST_RT_PARAM_UNNEEDED_VIRTUAL ~basic_naming_policy() {} 64 65 // Naming policy interface 66 virtual bool match_prefix( argv_traverser& tr ) const; 67 virtual bool match_name( argv_traverser& tr ) const; 68 virtual bool match_separator( argv_traverser& tr ) const; 69 70 // Data members 71 dstring m_prefix; 72 dstring m_name; 73 dstring m_separator; 74 }; 75 76 // ************************************************************************** // 77 // ************** dual_id_policy ************** // 78 // ************************************************************************** // 79 80 template<typename MostDerived,typename PrimaryId,typename SecondId> 81 class dual_id_policy : public identification_policy { 82 public: 83 // Constructor dual_id_policy()84 dual_id_policy() 85 : identification_policy( rtti::type_id<MostDerived>() ) 86 , m_primary() 87 , m_secondary() 88 {} 89 90 // Policy interface responds_to(cstring name) const91 virtual bool responds_to( cstring name ) const 92 { 93 return m_primary.responds_to( name ) || m_secondary.responds_to( name ); 94 } conflict_with(identification_policy const & id_p) const95 virtual bool conflict_with( identification_policy const& id_p ) const 96 { 97 return m_primary.conflict_with( id_p ) || m_secondary.conflict_with( id_p ); 98 } id_2_report() const99 virtual cstring id_2_report() const 100 { 101 return m_primary.id_2_report(); 102 } usage_info(format_stream & fs) const103 virtual void usage_info( format_stream& fs ) const 104 { 105 fs << BOOST_RT_PARAM_LITERAL( '{' ); 106 m_primary.usage_info( fs ); 107 fs << BOOST_RT_PARAM_LITERAL( '|' ); 108 m_secondary.usage_info( fs ); 109 fs << BOOST_RT_PARAM_LITERAL( '}' ); 110 } matching(parameter const & p,argv_traverser & tr,bool primary) const111 virtual bool matching( parameter const& p, argv_traverser& tr, bool primary ) const 112 { 113 return m_primary.matching( p, tr, primary ) || m_secondary.matching( p, tr, primary ); 114 } 115 116 protected: ~dual_id_policy()117 BOOST_RT_PARAM_UNNEEDED_VIRTUAL ~dual_id_policy() {} 118 119 // Data members 120 PrimaryId m_primary; 121 SecondId m_secondary; 122 }; 123 124 } // namespace cla 125 126 } // namespace BOOST_RT_PARAM_NAMESPACE 127 128 } // namespace boost 129 130 #ifndef BOOST_RT_PARAM_OFFLINE 131 132 # define BOOST_RT_PARAM_INLINE inline 133 # include <boost/test/utils/runtime/cla/id_policy.ipp> 134 135 #endif 136 137 // ************************************************************************** // 138 // Revision History: 139 // 140 // $Log: id_policy.hpp,v $ 141 // Revision 1.1.1.1 2006/03/20 20:15:29 ewalkup 142 // boost libraries 143 // 144 // Revision 1.1 2005/04/12 06:42:43 rogeeff 145 // Runtime.Param library initial commit 146 // 147 // ************************************************************************** // 148 149 #endif // BOOST_RT_CLA_ID_POLICY_HPP_062604GER 150