// (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: 54633 $ // // Description : some generic identification policies implementation // *************************************************************************** #ifndef BOOST_RT_CLA_ID_POLICY_IPP_062904GER #define BOOST_RT_CLA_ID_POLICY_IPP_062904GER // Boost.Runtime.Parameter #include #include #include namespace boost { namespace BOOST_RT_PARAM_NAMESPACE { namespace cla { // ************************************************************************** // // ************** basic_naming_policy ************** // // ************************************************************************** // BOOST_RT_PARAM_INLINE void basic_naming_policy::usage_info( format_stream& fs ) const { fs << p_prefix << p_name << p_separator; if( p_separator->empty() ) fs << BOOST_RT_PARAM_LITERAL( ' ' ); } //____________________________________________________________________________// BOOST_RT_PARAM_INLINE bool basic_naming_policy::match_prefix( argv_traverser& tr ) const { if( !tr.match_front( p_prefix.get() ) ) return false; tr.trim( p_prefix->size() ); return true; } //____________________________________________________________________________// BOOST_RT_PARAM_INLINE bool basic_naming_policy::match_name( argv_traverser& tr ) const { if( !tr.match_front( p_name.get() ) ) return false; tr.trim( p_name->size() ); return true; } //____________________________________________________________________________// BOOST_RT_PARAM_INLINE bool basic_naming_policy::match_separator( argv_traverser& tr, bool optional_value ) const { if( p_separator->empty() ) { if( !tr.token().is_empty() ) return false; tr.trim( 1 ); } else { if( !tr.match_front( p_separator.get() ) ) { // if parameter has optional value separator is optional as well if( optional_value && ( tr.eoi() || tr.match_front( ' ' ) ) ) { return true; } return false; } tr.trim( p_separator->size() ); } return true; } //____________________________________________________________________________// BOOST_RT_PARAM_INLINE bool basic_naming_policy::matching( parameter const& p, argv_traverser& tr, bool ) const { if( !match_prefix( tr ) ) return false; if( !match_name( tr ) ) return false; if( !match_separator( tr, p.p_optional_value ) ) return false; return true; } //____________________________________________________________________________// } // namespace cla } // namespace BOOST_RT_PARAM_NAMESPACE } // namespace boost #endif // BOOST_RT_CLA_ID_POLICY_IPP_062904GER