void config_file_iterator::Impl::substitute_macros( cstring& where ) { m_post_subst_line.clear(); cstring::size_type pos; while( (pos = where.find( m_macro_ref_begin )) != cstring::npos ) { m_post_subst_line.append( where.begin(), pos ); where.trim_left( where.begin() + pos + m_macro_ref_begin.size() ); pos = where.find( m_macro_ref_end ); BOOST_RT_PARAM_VALIDATE_LOGIC( pos != cstring::npos, BOOST_RT_PARAM_LITERAL( "incomplete macro reference" ) ); cstring value = *get_macro_value( where.substr( 0, pos ), false ); m_post_subst_line.append( value.begin(), value.size() ); where.trim_left( where.begin() + pos + m_macro_ref_end.size() ); } if( !m_post_subst_line.empty() ) { m_post_subst_line.append( where.begin(), where.size() ); where = m_post_subst_line; } }
void config_file_iterator::Impl::process_command_line( cstring line ) { line.trim_left( m_command_delimeter.size() ); unit_test::string_token_iterator tit( line, unit_test::max_tokens = 2 ); command_handler_map::const_iterator it = m_command_handler_map.find( *tit ); BOOST_RT_PARAM_VALIDATE_LOGIC( it != m_command_handler_map.end(), BOOST_RT_PARAM_LITERAL( "Invalid command " ) << *tit ); ++tit; (it->second)( *tit ); }
inline bool interpret_argument_value( cstring source, hexerboost::optional<std::list<T> >& res, int ) { BOOST_RT_PARAM_TRACE( "In interpret_argument_value<std::list<T>>" ); res = std::list<T>(); while( !source.is_empty() ) { // !! should we use token_iterator cstring::iterator single_value_end = std::find( source.begin(), source.end(), BOOST_RT_PARAM_LITERAL( ',' ) ); hexerboost::optional<T> value; interpret_argument_value( cstring( source.begin(), single_value_end ), value, 0 ); res->push_back( *value ); source.trim_left( single_value_end + 1 ); } return true; }