}//namespace
+static bool keyIsNumber(const std::string & option, size_t start)
+{
+ bool isNumber = true;
+ size_t end = option.find_first_of('=', start);
+ end = option.npos == end ? option.length() : end;
+
+ for ( ; start < end; ++start)
+ if (!isdigit(option[start]))
+ {
+ isNumber = false;
+ break;
+ }
+
+ return isNumber;
+}
+
CommandLineParser::CommandLineParser(int argc, const char* const argv[], const char* keys)
{
std::string keys_buffer;
if (!argv[i])
break;
curName = argv[i];
- if (curName.find('-') == 0 && ((curName[1] < '0') || (curName[1] > '9')))
- {
- while (curName.find('-') == 0)
- curName.erase(curName.begin(), (curName.begin() + 1));
- }
- else
- withNoKey = true;
+
+ size_t nondash = curName.find_first_not_of("-");
+ if (nondash == 0 || nondash == curName.npos || keyIsNumber(curName, nondash))
+ withNoKey = true;
+ else
+ curName.erase(0, nondash);
+
if (curName.find('=') != curName.npos)
{
hasValueThroughEq = true;