26 #ifndef _COMMAND_LINE_READER_HH_
27 #define _COMMAND_LINE_READER_HH_
34 for (
int i = 1; i < argc; ++i ) {
35 if ( argv [ i ] [ 0 ] !=
'-' ) {
36 std :: ostringstream oss;
37 oss <<
"Command line argument " << i <<
" (='" << argv [ i ] <<
"') is invalid.";
41 std :: string paramName, paramValue;
45 if ( argv [ i ] [ 1 ] ==
'-' ) {
47 if ( argv [ i ] [ 2 ] == 0 || !std :: isalpha(argv [ i ] [ 2 ]) ) {
48 std :: ostringstream oss;
49 oss <<
"Parameter name of argument " << i <<
" ('" << argv [ i ] <<
"')"
50 <<
" is invalid because it does not start with a letter.";
55 std :: string s(argv [ i ] + 2);
60 if ( j >= s.size() ) {
66 }
else if ( s [ j ] ==
'=' ) {
70 paramName = s.substr(0, j);
71 paramValue = s.substr(j + 1);
73 }
else if ( s [ j ] ==
'-' ) {
76 if ( s.size() == j ) {
77 std :: ostringstream oss;
78 oss <<
"Parameter name of argument " << i <<
" ('" << argv [ i ] <<
"')"
79 <<
" is invalid (ends with a '-' character).";
81 }
else if ( s [ j ] ==
'-' ) {
82 std :: ostringstream oss;
83 oss <<
"Malformed parameter name in argument " << i <<
" ('" << argv [ i ] <<
"'): "
84 <<
"'--' in parameter name.";
88 s [ j ] = std :: toupper(s [ j ]);
89 }
else if ( !std :: isalnum(s [ j ]) ) {
90 std :: ostringstream oss;
91 oss <<
"Parameter name of argument " << i <<
" ('" << argv [ i ] <<
"')"
92 <<
" is invalid (character '" << s [ j ] <<
"' is not a letter or digit).";
100 paramName = argv [ i ] + 1;
102 if ( argc == i + 1 || argv [ i + 1 ] [ 0 ] ==
'-' ) {
103 std :: ostringstream oss;
104 oss <<
"No argument given for parameter '" << argv [ i ] <<
"'!";
108 paramValue = argv [ i + 1 ];
113 paramName [ 0 ] = std :: toupper(paramName [ 0 ]);
116 paramTree [ paramName ] = paramValue;