クラス toppers::cmdlineコマンドライン解析クラス
[詳細]
#include "toppers/cmdline.hpp"
すべてのメンバ一覧
|
Public メソッド |
| cmdline (int argc, char *argv[]) |
| main関数の引数を受け取るコンストラクタ
|
std::auto_ptr< std::vector<
std::string > > | parse (const std::string &pattern, option_array &options) const |
| コマンドライン引数の解析
|
Static Public メソッド |
static std::vector< std::string
>::const_iterator | find_illegal_options (std::vector< std::string >::const_iterator first, std::vector< std::string >::const_iterator last) |
| 不正オプションの探索
|
構成 |
class | option_array |
| コマンドラインオプション格納用コンテナ [詳細]
|
説明
コマンドライン解析クラス
cmdline.hpp の 66 行で定義されています。
コンストラクタとデストラクタ
toppers::cmdline::cmdline |
( |
int |
argc, |
|
|
char * |
argv[] |
|
) |
|
|
|
main関数の引数を受け取るコンストラクタ
- 引数:
-
| argc | コマンドライン引数の個数 |
| argv | コマンドライン引数を格納した配列 |
cmdline.cpp の 239 行で定義されています。 00239 : argc_( argc ), argv_( argv )
00240 {
00241 }
|
関数
std::vector< std::string >::const_iterator toppers::cmdline::find_illegal_options |
( |
std::vector< std::string >::const_iterator |
first, |
|
|
std::vector< std::string >::const_iterator |
last |
|
) |
[static] |
|
|
不正オプションの探索
- 引数:
-
| first | オプション列の先頭位置 |
| last | オプション列の終端位置+1 |
- 戻り値:
- 不正オプションを検出した場合はその位置を、それ以外はlastを返す。
- 覚え書き:
- 不正オプションを検出した場合、reportererror が呼び出されます。
cmdline.cpp の 362 行で定義されています。
参照先 _・rout. 00363 {
00364 for ( std::vector<std::string>::const_iterator iter( first ); iter != last; ++iter )
00365 {
00366 if ( iter->at( 0 ) == '-' )
00367 {
00368 rout.error( _( "illegal option `%1%\'" ) % *iter );
00369 return iter;
00370 }
00371 }
00372 return last;
00373 }
|
std::auto_ptr< std::vector< std::string > > toppers::cmdline::parse |
( |
const std::string & |
pattern, |
|
|
option_array & |
options |
|
) |
const |
|
|
コマンドライン引数の解析
- 引数:
-
| pattern | オプションとして受け入れるパターン |
| options | 解析結果の格納先 |
- 戻り値:
- オプション以外の引数
patternには、受け入れるオプションを空白文字で区切って列挙します。 その際、パラメータを受け取るオプションは、末尾に':'または'='を指定してください。 ':'を指定した場合、オプション名の後にそのままパラメータを渡します。 '='を指定した場合、オプション名の後に'='を挟んでパラメータを指定します。
cmdline cmdl( argc, argv );
option_array options;
cmdl.parse( "-I: -v --source=", options );
cmdline.cpp の 261 行で定義されています。
参照先 _・rout. 00262 {
00263 std::stringstream sstr( pattern );
00264 option_array::map optmap;
00265 option_array::set optset;
00266 std::list<const char*> args( argv_+1, argv_+argc_ );
00267
00268
00269 std::string name;
00270 while ( sstr >> name )
00271 {
00272 if ( name[0] == '-' )
00273 {
00274 optset.insert( name );
00275 }
00276 }
00277
00278 const std::set<std::string>::const_iterator last( optset.end() );
00279 for ( std::set<std::string>::const_iterator iter( optset.begin() ); iter != last; ++iter )
00280 {
00281 std::string name( *iter );
00282 bool has_arg = false;
00283 char back = *name.rbegin();
00284 if ( back == ':' )
00285 {
00286 has_arg = true;
00287 name.erase( name.size()-1 );
00288 }
00289 else if ( back == '=' )
00290 {
00291 has_arg = true;
00292 }
00293 std::list<const char*>::iterator iter2( args.begin() );
00294 while ( iter2 != args.end() )
00295 {
00296 const char* argv = *iter2;
00297 if ( ( back == '=' && strncmp( argv, name.c_str(), name.size() ) == 0 )
00298 || ( back != '=' && strcmp( argv, name.c_str() ) == 0 ) )
00299 {
00300 typedef option_array::map::value_type option;
00301 if ( has_arg )
00302 {
00303 if ( argv[name.size()] != '\0' )
00304 {
00305 argv = argv+name.size();
00306 }
00307 else
00308 {
00309 std::list<const char*>::iterator next( boost::next( iter2 ) );
00310 if ( next != args.end() )
00311 {
00312 argv = *next;
00313 }
00314 else
00315 {
00316
00317 rout.error( _( "argument to `%1%\' is missing" ) % name );
00318 }
00319 args.erase( next );
00320 }
00321 while ( std::isspace( *argv ) )
00322 ;
00323 if ( back == ':' )
00324 {
00325 name += ':';
00326 }
00327 option opt( name, std::string( argv ) );
00328 optmap.insert( opt );
00329 }
00330 else
00331 {
00332 option opt( name, "" );
00333 optmap.insert( opt );
00334 }
00335 std::list<const char*>::iterator next = boost::next( iter2 );
00336 args.erase( iter2 );
00337 iter2 = next;
00338 }
00339 else
00340 {
00341 ++iter2;
00342 }
00343 }
00344 }
00345
00346
00347 std::auto_ptr<std::vector<std::string> > result( new std::vector<std::string>( args.begin(), args.end() ) );
00348
00349 option_array t( optmap, optset );
00350 options.swap( t );
00351
00352 return result;
00353 }
|
このクラスの説明は次のファイルから生成されました:
Copyright © 2006 by TAKAGI Nobuhisa.
このページは Wed Apr 12 16:32:02 2006 に Doxygen によって生成されました。
|
|