Chris@16: // (C) Copyright Gennadiy Rozental 2005-2008. Chris@16: // Use, modification, and distribution are subject to the Chris@16: // Boost Software License, Version 1.0. (See accompanying file Chris@16: // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: // See http://www.boost.org/libs/test for the library home page. Chris@16: // Chris@16: // File : $RCSfile$ Chris@16: // Chris@101: // Version : $Revision$ Chris@16: // Chris@16: // Description : some generic identification policies implementation Chris@16: // *************************************************************************** Chris@16: Chris@16: #ifndef BOOST_RT_CLA_ID_POLICY_IPP_062904GER Chris@16: #define BOOST_RT_CLA_ID_POLICY_IPP_062904GER Chris@16: Chris@16: // Boost.Runtime.Parameter Chris@16: #include Chris@16: Chris@16: #include Chris@16: #include Chris@16: Chris@16: namespace boost { Chris@16: Chris@16: namespace BOOST_RT_PARAM_NAMESPACE { Chris@16: Chris@16: namespace cla { Chris@16: Chris@16: // ************************************************************************** // Chris@16: // ************** basic_naming_policy ************** // Chris@16: // ************************************************************************** // Chris@16: Chris@16: BOOST_RT_PARAM_INLINE void Chris@16: basic_naming_policy::usage_info( format_stream& fs ) const Chris@16: { Chris@16: fs << p_prefix << p_name << p_separator; Chris@16: Chris@16: if( p_separator->empty() ) Chris@16: fs << BOOST_RT_PARAM_LITERAL( ' ' ); Chris@16: } Chris@16: Chris@16: //____________________________________________________________________________// Chris@16: Chris@16: BOOST_RT_PARAM_INLINE bool Chris@16: basic_naming_policy::match_prefix( argv_traverser& tr ) const Chris@16: { Chris@16: if( !tr.match_front( p_prefix.get() ) ) Chris@16: return false; Chris@16: Chris@16: tr.trim( p_prefix->size() ); Chris@16: return true; Chris@16: } Chris@16: Chris@16: //____________________________________________________________________________// Chris@16: Chris@16: BOOST_RT_PARAM_INLINE bool Chris@16: basic_naming_policy::match_name( argv_traverser& tr ) const Chris@16: { Chris@16: if( !tr.match_front( p_name.get() ) ) Chris@16: return false; Chris@16: Chris@16: tr.trim( p_name->size() ); Chris@16: return true; Chris@16: } Chris@16: Chris@16: //____________________________________________________________________________// Chris@16: Chris@16: BOOST_RT_PARAM_INLINE bool Chris@16: basic_naming_policy::match_separator( argv_traverser& tr, bool optional_value ) const Chris@16: { Chris@16: if( p_separator->empty() ) { Chris@16: if( !tr.token().is_empty() ) Chris@16: return false; Chris@16: Chris@16: tr.trim( 1 ); Chris@16: } Chris@16: else { Chris@16: if( !tr.match_front( p_separator.get() ) ) { Chris@16: // if parameter has optional value separator is optional as well Chris@16: if( optional_value && ( tr.eoi() || tr.match_front( ' ' ) ) ) { Chris@16: return true; Chris@16: } Chris@16: return false; Chris@16: } Chris@16: Chris@16: tr.trim( p_separator->size() ); Chris@16: } Chris@16: Chris@16: return true; Chris@16: } Chris@16: Chris@16: //____________________________________________________________________________// Chris@16: Chris@16: BOOST_RT_PARAM_INLINE bool Chris@16: basic_naming_policy::matching( parameter const& p, argv_traverser& tr, bool ) const Chris@16: { Chris@16: if( !match_prefix( tr ) ) Chris@16: return false; Chris@16: Chris@16: if( !match_name( tr ) ) Chris@16: return false; Chris@16: Chris@16: if( !match_separator( tr, p.p_optional_value ) ) Chris@16: return false; Chris@16: Chris@16: return true; Chris@16: } Chris@16: Chris@16: //____________________________________________________________________________// Chris@16: Chris@16: } // namespace cla Chris@16: Chris@16: } // namespace BOOST_RT_PARAM_NAMESPACE Chris@16: Chris@16: } // namespace boost Chris@16: Chris@16: #endif // BOOST_RT_CLA_ID_POLICY_IPP_062904GER