Chris@16
|
1 // (C) Copyright Gennadiy Rozental 2005-2008.
|
Chris@16
|
2 // Use, modification, and distribution are subject to the
|
Chris@16
|
3 // Boost Software License, Version 1.0. (See accompanying file
|
Chris@16
|
4 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
5
|
Chris@16
|
6 // See http://www.boost.org/libs/test for the library home page.
|
Chris@16
|
7 //
|
Chris@16
|
8 // File : $RCSfile$
|
Chris@16
|
9 //
|
Chris@101
|
10 // Version : $Revision$
|
Chris@16
|
11 //
|
Chris@16
|
12 // Description : some generic identification policies definition
|
Chris@16
|
13 // ***************************************************************************
|
Chris@16
|
14
|
Chris@16
|
15 #ifndef BOOST_RT_CLA_ID_POLICY_HPP_062604GER
|
Chris@16
|
16 #define BOOST_RT_CLA_ID_POLICY_HPP_062604GER
|
Chris@16
|
17
|
Chris@16
|
18 // Boost.Runtime.Parameter
|
Chris@16
|
19 #include <boost/test/utils/runtime/config.hpp>
|
Chris@16
|
20
|
Chris@16
|
21 #include <boost/test/utils/runtime/cla/fwd.hpp>
|
Chris@16
|
22 #include <boost/test/utils/runtime/cla/modifier.hpp>
|
Chris@16
|
23 #include <boost/test/utils/runtime/cla/argv_traverser.hpp>
|
Chris@16
|
24
|
Chris@16
|
25 #include <boost/test/utils/runtime/cla/iface/id_policy.hpp>
|
Chris@16
|
26
|
Chris@16
|
27 // Boost.Test
|
Chris@16
|
28 #include <boost/test/utils/class_properties.hpp>
|
Chris@16
|
29 #include <boost/test/utils/rtti.hpp>
|
Chris@16
|
30
|
Chris@16
|
31 namespace boost {
|
Chris@16
|
32
|
Chris@16
|
33 namespace BOOST_RT_PARAM_NAMESPACE {
|
Chris@16
|
34
|
Chris@16
|
35 namespace cla {
|
Chris@16
|
36
|
Chris@16
|
37 // ************************************************************************** //
|
Chris@16
|
38 // ************** naming_policy_base ************** //
|
Chris@16
|
39 // ************************************************************************** //
|
Chris@16
|
40 // model: <prefix> <name> <separtor>
|
Chris@16
|
41
|
Chris@16
|
42 class basic_naming_policy : public identification_policy {
|
Chris@16
|
43 public:
|
Chris@16
|
44 // Public properties
|
Chris@16
|
45 unit_test::readwrite_property<dstring> p_prefix;
|
Chris@16
|
46 unit_test::readwrite_property<dstring> p_name;
|
Chris@16
|
47 unit_test::readwrite_property<dstring> p_separator;
|
Chris@16
|
48
|
Chris@16
|
49 // Policy interface
|
Chris@16
|
50 virtual bool responds_to( cstring name ) const { return p_name == name; }
|
Chris@16
|
51 virtual cstring id_2_report() const { return p_name.get(); }
|
Chris@16
|
52 virtual void usage_info( format_stream& fs ) const;
|
Chris@16
|
53 virtual bool matching( parameter const& p, argv_traverser& tr, bool primary ) const;
|
Chris@16
|
54
|
Chris@16
|
55 // Accept modifier
|
Chris@16
|
56 template<typename Modifier>
|
Chris@16
|
57 void accept_modifier( Modifier const& m )
|
Chris@16
|
58 {
|
Chris@16
|
59 nfp::optionally_assign( p_prefix.value, m, prefix );
|
Chris@16
|
60 nfp::optionally_assign( p_name.value, m, name );
|
Chris@16
|
61 nfp::optionally_assign( p_separator.value, m, separator );
|
Chris@16
|
62 }
|
Chris@16
|
63
|
Chris@16
|
64 protected:
|
Chris@16
|
65 explicit basic_naming_policy( rtti::id_t dyn_type )
|
Chris@16
|
66 : identification_policy( dyn_type )
|
Chris@16
|
67 {}
|
Chris@16
|
68 BOOST_RT_PARAM_UNNEEDED_VIRTUAL ~basic_naming_policy() {}
|
Chris@16
|
69
|
Chris@16
|
70 // Naming policy interface
|
Chris@16
|
71 virtual bool match_prefix( argv_traverser& tr ) const;
|
Chris@16
|
72 virtual bool match_name( argv_traverser& tr ) const;
|
Chris@16
|
73 virtual bool match_separator( argv_traverser& tr, bool optional_value ) const;
|
Chris@16
|
74 };
|
Chris@16
|
75
|
Chris@16
|
76 // ************************************************************************** //
|
Chris@16
|
77 // ************** dual_id_policy ************** //
|
Chris@16
|
78 // ************************************************************************** //
|
Chris@16
|
79
|
Chris@16
|
80 template<typename MostDerived,typename PrimaryId,typename SecondId>
|
Chris@16
|
81 class dual_id_policy : public identification_policy {
|
Chris@16
|
82 public:
|
Chris@16
|
83 // Constructor
|
Chris@16
|
84 dual_id_policy()
|
Chris@16
|
85 : identification_policy( rtti::type_id<MostDerived>() )
|
Chris@16
|
86 , m_primary()
|
Chris@16
|
87 , m_secondary()
|
Chris@16
|
88 {}
|
Chris@16
|
89
|
Chris@16
|
90 // Policy interface
|
Chris@16
|
91 virtual bool responds_to( cstring name ) const
|
Chris@16
|
92 {
|
Chris@16
|
93 return m_primary.responds_to( name ) || m_secondary.responds_to( name );
|
Chris@16
|
94 }
|
Chris@16
|
95 virtual bool conflict_with( identification_policy const& id_p ) const
|
Chris@16
|
96 {
|
Chris@16
|
97 return id_p.conflict_with( m_primary ) || id_p.conflict_with( m_secondary );
|
Chris@16
|
98 }
|
Chris@16
|
99 virtual cstring id_2_report() const
|
Chris@16
|
100 {
|
Chris@16
|
101 return m_primary.id_2_report();
|
Chris@16
|
102 }
|
Chris@16
|
103 virtual void usage_info( format_stream& fs ) const
|
Chris@16
|
104 {
|
Chris@16
|
105 fs << BOOST_RT_PARAM_LITERAL( '{' );
|
Chris@16
|
106 m_primary.usage_info( fs );
|
Chris@16
|
107 fs << BOOST_RT_PARAM_LITERAL( '|' );
|
Chris@16
|
108 m_secondary.usage_info( fs );
|
Chris@16
|
109 fs << BOOST_RT_PARAM_LITERAL( '}' );
|
Chris@16
|
110 }
|
Chris@16
|
111 virtual bool matching( parameter const& p, argv_traverser& tr, bool primary ) const
|
Chris@16
|
112 {
|
Chris@16
|
113 return m_primary.matching( p, tr, primary ) || m_secondary.matching( p, tr, primary );
|
Chris@16
|
114 }
|
Chris@16
|
115
|
Chris@16
|
116 // Accept modifier
|
Chris@16
|
117 template<typename Modifier>
|
Chris@16
|
118 void accept_modifier( Modifier const& m )
|
Chris@16
|
119 {
|
Chris@16
|
120 m_primary.accept_modifier( m );
|
Chris@16
|
121 m_secondary.accept_modifier( m );
|
Chris@16
|
122 }
|
Chris@16
|
123
|
Chris@16
|
124 protected:
|
Chris@16
|
125 BOOST_RT_PARAM_UNNEEDED_VIRTUAL ~dual_id_policy() {}
|
Chris@16
|
126
|
Chris@16
|
127 // Data members
|
Chris@16
|
128 PrimaryId m_primary;
|
Chris@16
|
129 SecondId m_secondary;
|
Chris@16
|
130 };
|
Chris@16
|
131
|
Chris@16
|
132 } // namespace cla
|
Chris@16
|
133
|
Chris@16
|
134 } // namespace BOOST_RT_PARAM_NAMESPACE
|
Chris@16
|
135
|
Chris@16
|
136 } // namespace boost
|
Chris@16
|
137
|
Chris@16
|
138 #ifndef BOOST_RT_PARAM_OFFLINE
|
Chris@16
|
139
|
Chris@16
|
140 # define BOOST_RT_PARAM_INLINE inline
|
Chris@16
|
141 # include <boost/test/utils/runtime/cla/id_policy.ipp>
|
Chris@16
|
142
|
Chris@16
|
143 #endif
|
Chris@16
|
144
|
Chris@16
|
145 #endif // BOOST_RT_CLA_ID_POLICY_HPP_062604GER
|