146 lines
4.7 KiB
C++
146 lines
4.7 KiB
C++
// (C) Copyright Gennadiy Rozental 2005-2008.
|
|
// 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: 57992 $
|
|
//
|
|
// Description : some generic identification policies definition
|
|
// ***************************************************************************
|
|
|
|
#ifndef BOOST_RT_CLA_ID_POLICY_HPP_062604GER
|
|
#define BOOST_RT_CLA_ID_POLICY_HPP_062604GER
|
|
|
|
// Boost.Runtime.Parameter
|
|
#include <boost/test/utils/runtime/config.hpp>
|
|
|
|
#include <boost/test/utils/runtime/cla/fwd.hpp>
|
|
#include <boost/test/utils/runtime/cla/modifier.hpp>
|
|
#include <boost/test/utils/runtime/cla/argv_traverser.hpp>
|
|
|
|
#include <boost/test/utils/runtime/cla/iface/id_policy.hpp>
|
|
|
|
// Boost.Test
|
|
#include <boost/test/utils/class_properties.hpp>
|
|
#include <boost/test/utils/rtti.hpp>
|
|
|
|
namespace boost {
|
|
|
|
namespace BOOST_RT_PARAM_NAMESPACE {
|
|
|
|
namespace cla {
|
|
|
|
// ************************************************************************** //
|
|
// ************** naming_policy_base ************** //
|
|
// ************************************************************************** //
|
|
// model: <prefix> <name> <separtor>
|
|
|
|
class basic_naming_policy : public identification_policy {
|
|
public:
|
|
// Public properties
|
|
unit_test::readwrite_property<dstring> p_prefix;
|
|
unit_test::readwrite_property<dstring> p_name;
|
|
unit_test::readwrite_property<dstring> p_separator;
|
|
|
|
// Policy interface
|
|
virtual bool responds_to( cstring name ) const { return p_name == name; }
|
|
virtual cstring id_2_report() const { return p_name.get(); }
|
|
virtual void usage_info( format_stream& fs ) const;
|
|
virtual bool matching( parameter const& p, argv_traverser& tr, bool primary ) const;
|
|
|
|
// Accept modifier
|
|
template<typename Modifier>
|
|
void accept_modifier( Modifier const& m )
|
|
{
|
|
nfp::optionally_assign( p_prefix.value, m, prefix );
|
|
nfp::optionally_assign( p_name.value, m, name );
|
|
nfp::optionally_assign( p_separator.value, m, separator );
|
|
}
|
|
|
|
protected:
|
|
explicit basic_naming_policy( rtti::id_t dyn_type )
|
|
: identification_policy( dyn_type )
|
|
{}
|
|
BOOST_RT_PARAM_UNNEEDED_VIRTUAL ~basic_naming_policy() {}
|
|
|
|
// Naming policy interface
|
|
virtual bool match_prefix( argv_traverser& tr ) const;
|
|
virtual bool match_name( argv_traverser& tr ) const;
|
|
virtual bool match_separator( argv_traverser& tr, bool optional_value ) const;
|
|
};
|
|
|
|
// ************************************************************************** //
|
|
// ************** dual_id_policy ************** //
|
|
// ************************************************************************** //
|
|
|
|
template<typename MostDerived,typename PrimaryId,typename SecondId>
|
|
class dual_id_policy : public identification_policy {
|
|
public:
|
|
// Constructor
|
|
dual_id_policy()
|
|
: identification_policy( rtti::type_id<MostDerived>() )
|
|
, m_primary()
|
|
, m_secondary()
|
|
{}
|
|
|
|
// Policy interface
|
|
virtual bool responds_to( cstring name ) const
|
|
{
|
|
return m_primary.responds_to( name ) || m_secondary.responds_to( name );
|
|
}
|
|
virtual bool conflict_with( identification_policy const& id_p ) const
|
|
{
|
|
return id_p.conflict_with( m_primary ) || id_p.conflict_with( m_secondary );
|
|
}
|
|
virtual cstring id_2_report() const
|
|
{
|
|
return m_primary.id_2_report();
|
|
}
|
|
virtual void usage_info( format_stream& fs ) const
|
|
{
|
|
fs << BOOST_RT_PARAM_LITERAL( '{' );
|
|
m_primary.usage_info( fs );
|
|
fs << BOOST_RT_PARAM_LITERAL( '|' );
|
|
m_secondary.usage_info( fs );
|
|
fs << BOOST_RT_PARAM_LITERAL( '}' );
|
|
}
|
|
virtual bool matching( parameter const& p, argv_traverser& tr, bool primary ) const
|
|
{
|
|
return m_primary.matching( p, tr, primary ) || m_secondary.matching( p, tr, primary );
|
|
}
|
|
|
|
// Accept modifier
|
|
template<typename Modifier>
|
|
void accept_modifier( Modifier const& m )
|
|
{
|
|
m_primary.accept_modifier( m );
|
|
m_secondary.accept_modifier( m );
|
|
}
|
|
|
|
protected:
|
|
BOOST_RT_PARAM_UNNEEDED_VIRTUAL ~dual_id_policy() {}
|
|
|
|
// Data members
|
|
PrimaryId m_primary;
|
|
SecondId m_secondary;
|
|
};
|
|
|
|
} // namespace cla
|
|
|
|
} // namespace BOOST_RT_PARAM_NAMESPACE
|
|
|
|
} // namespace boost
|
|
|
|
#ifndef BOOST_RT_PARAM_OFFLINE
|
|
|
|
# define BOOST_RT_PARAM_INLINE inline
|
|
# include <boost/test/utils/runtime/cla/id_policy.ipp>
|
|
|
|
#endif
|
|
|
|
#endif // BOOST_RT_CLA_ID_POLICY_HPP_062604GER
|