Line 45... |
Line 45... |
class Args {
|
class Args {
|
arg_vector_t& legal_args;
|
arg_vector_t& legal_args;
|
argument_t* def_arg;
|
argument_t* def_arg;
|
std::string program_name;
|
std::string program_name;
|
argument_t help_arg;
|
argument_t help_arg;
|
public:
|
void clean_args() {
|
|
for( int j=0; j<legal_args.size(); j++ ) {
|
|
argument_t& a = *legal_args[j];
|
|
if( a.short_name=="-h" && a.long_name!="help" )
|
|
{ help_arg.short_name.clear(); break; } // remove -h for help if already used
|
|
}
|
|
}
|
void throw_error( std::string x ) /*throw const char**/ { throw x.c_str(); }
|
void throw_error( std::string x ) /*throw const char**/ { throw x.c_str(); }
|
|
public:
|
Args( int argc, char *argv[], arg_vector_t& legal_args ) //throw const char *
|
Args( int argc, char *argv[], arg_vector_t& legal_args ) //throw const char *
|
: legal_args( legal_args ),
|
: legal_args( legal_args ),
|
help_arg( legal_args, "help", argument_t::flag, "Display usage information")
|
help_arg( legal_args, "help", argument_t::flag, "Display usage information")
|
{
|
{
|
|
clean_args(); // eliminate duplicated values
|
// look for default argument
|
// look for default argument
|
def_arg=NULL;
|
def_arg=NULL;
|
for( int j=0; j<legal_args.size(); j++ ) {
|
for( int j=0; j<legal_args.size(); j++ ) {
|
if ( legal_args[j]->short_name.empty() && legal_args[j]->long_name.empty() )
|
if ( legal_args[j]->short_name.empty() && legal_args[j]->long_name.empty() )
|
if( def_arg==NULL ) def_arg = legal_args[j];
|
if( def_arg==NULL ) def_arg = legal_args[j];
|
Line 130... |
Line 138... |
argument_t& a = *legal_args[j];
|
argument_t& a = *legal_args[j];
|
if( a.long_name.empty() && a.long_name.empty() ) continue;
|
if( a.long_name.empty() && a.long_name.empty() ) continue;
|
std::cout << "\t";
|
std::cout << "\t";
|
std::string aux;
|
std::string aux;
|
if( !a.long_name.empty() ) aux = a.long_name;
|
if( !a.long_name.empty() ) aux = a.long_name;
|
if( !a.long_name.empty() && !a.long_name.empty() ) aux += " | ";
|
if( !a.long_name.empty() && !a.short_name.empty() ) aux += " | ";
|
if( !a.short_name.empty() ) aux+= a.short_name;
|
if( !a.short_name.empty() ) aux+= a.short_name;
|
std::cout << brackets( a, aux );
|
std::cout << brackets( a, aux );
|
switch( a.type ) {
|
switch( a.type ) {
|
case argument_t::integer: std::cout << " followed by integer number. "; break;
|
case argument_t::integer: std::cout << " followed by integer number. "; break;
|
case argument_t::real : std::cout << " followed by real number. "; break;
|
case argument_t::real : std::cout << " followed by real number. "; break;
|