00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #include "argumentparser.hpp"
00032 #include <iostream>
00033 #include <string.h>
00034
00051 ArgumentParser::ArgumentParser()
00052 {
00053 NoParamArgs = "";
00054 }
00055
00060 ArgumentParser::~ArgumentParser()
00061 {
00062 }
00063
00073 bool ArgumentParser::parseArguments( int argc, char **argv )
00074 {
00075 if( argc == 1 )
00076 return true;
00077
00078 string pendingArg;
00079 for( int i = 1; i < argc; i++ )
00080 {
00081 uint len = strlen( argv[i] );
00082 if( argv[i][0] == '-' && len > 1)
00083 {
00084 if( !pendingArg.empty() )
00085 {
00086 NoParamArgs += pendingArg;
00087 pendingArg = "";
00088 }
00089
00090 uint j = 1;
00091 for( ; j < len - 1; j++ )
00092 {
00093 NoParamArgs += argv[i][j];
00094 }
00095 pendingArg = argv[i][j];
00096 }
00097 else if( !pendingArg.empty() )
00098 {
00099 ArgsMap[pendingArg] = argv[i];
00100 pendingArg = "";
00101 }
00102 else
00103 {
00104 return false;
00105 }
00106 }
00107
00108 if( !pendingArg.empty() )
00109 {
00110 NoParamArgs += pendingArg;
00111 }
00112 return true;
00113 }
00114
00118 uint ArgumentParser::numArguments() const
00119 {
00120 return ArgsMap.size() + NoParamArgs.length();
00121 }
00122
00127 typedef map<string, string>::const_iterator mapIt;
00128 string ArgumentParser::argValue( const string &arg ) const
00129 {
00130 mapIt it = ArgsMap.find( arg );
00131 if( it != ArgsMap.end() )
00132 {
00133 return (*it).second;
00134 }
00135
00136 return "";
00137 }
00138
00144 bool ArgumentParser::boolArgValue( const string &arg ) const
00145 {
00146 mapIt it = ArgsMap.find( arg );
00147 if( it != ArgsMap.end() )
00148 {
00149 if( (*it).second == "true" ||
00150 (*it).second == "1" ||
00151 (*it).second == "on" )
00152 {
00153 return true;
00154 }
00155 }
00156
00157 return false;
00158 }
00159
00163 bool ArgumentParser::singleArgSet( char arg ) const
00164 {
00165 if( NoParamArgs.find( arg ) != string::npos )
00166 return true;
00167 return false;
00168 }