ref: 0d4138441ce94cc3d1fabff9d9ecba1589d948fe
dir: /music/pokeredmusicdisasm/args.cpp/
#include <sstream> #include "args.h" using namespace std; Args::Args(int _argc, char**& _argv) { argc = _argc; for(int i = 0; i < _argc; i++) { argv.push_back(string(_argv[i])); } } //template<class T> /*export void Args::GetArg(unsigned int ind, T& var, ios_base::fmtflags flags) { string stream _tmpstr; _tmpstr << flags; _tmpstr << GetArgv(ind); _tmpstr >> var; }*/ int Args::GetArgs() { return argv.size(); } string Args::GetArgv(int ind) { return argv[ind]; } bool Args::IsLongOption(int ind) // Is that argument a --long-key=value { if(GetArgv(ind).substr(0, 2) == "--") return true; else return false; } bool Args::IsShortOption(int ind, bool param2) // Is that argument a --long-key=value { if(param2) { if(GetArgv(ind).substr(0, 1) == "-" && // The argument must start with - GetArgv(ind).substr(0, 2) != "--" && // The argument can't start with "--" ind + 1 < GetArgs()) return true; // The second argument must exist } else { if(GetArgv(ind).substr(0, 1) == "-" && // The argument must start with - GetArgv(ind).substr(0, 2) != "--") return true; // The argument can't start with "--" } return false; } string Args::GetKey(int ind) // Get the key, if not a key/value then returns the arg { if(IsLongOption(ind) && GetArgv(ind).find("=") != string::npos) return GetArgv(ind).substr(2, GetArgv(ind).find("=") - 2); else if(IsShortOption(ind)) return GetArgv(ind).substr(1); else return GetArgv(ind); } string Args::GetValue(int ind, bool param2) // Get the value , if not a key/value then returns the arg { if(IsLongOption(ind) && GetArgv(ind).find("=") != string::npos) return GetArgv(ind).substr(GetArgv(ind).find("=") + 1); else if(IsShortOption(ind, param2)) { if(param2) return GetArgv(ind + 1); else return GetArgv(ind); } return GetArgv(ind); } int Args::SearchKeys(const char* str) { string needle = str; string scr = ""; unsigned int pos = -1; for(int i = 0; i < GetArgs(); i++) { scr = GetKey(i); if(scr == needle) { pos = i; break; } } return pos; }