commandline: Added ability to skip arguments.

This commit is contained in:
Branimir Karadžić
2016-10-19 18:11:27 -07:00
parent 3aca2cab39
commit ce7db3b5a6

View File

@@ -22,25 +22,31 @@ namespace bx
const char* findOption(const char* _long, const char* _default) const
{
const char* result = find('\0', _long, 1);
const char* result = find(0, '\0', _long, 1);
return result == NULL ? _default : result;
}
const char* findOption(const char _short, const char* _long, const char* _default) const
{
const char* result = find(_short, _long, 1);
const char* result = find(0, _short, _long, 1);
return result == NULL ? _default : result;
}
const char* findOption(const char* _long, int _numParams = 1) const
{
const char* result = find('\0', _long, _numParams);
const char* result = find(0, '\0', _long, _numParams);
return result;
}
const char* findOption(const char _short, const char* _long = NULL, int _numParams = 1) const
{
const char* result = find(_short, _long, _numParams);
const char* result = find(0, _short, _long, _numParams);
return result;
}
const char* findOption(int _skip, const char _short, const char* _long = NULL, int _numParams = 1) const
{
const char* result = find(_skip, _short, _long, _numParams);
return result;
}
@@ -132,7 +138,7 @@ namespace bx
}
private:
const char* find(const char _short, const char* _long, int _numParams) const
const char* find(int _skip, const char _short, const char* _long, int _numParams) const
{
for (int ii = 0; ii < m_argc; ++ii)
{
@@ -144,34 +150,46 @@ namespace bx
{
if (1 == strlen(arg) )
{
if (0 == _numParams)
if (0 == _skip)
{
return "";
}
else if (ii+_numParams < m_argc
&& '-' != *m_argv[ii+1] )
{
return m_argv[ii+1];
if (0 == _numParams)
{
return "";
}
else if (ii+_numParams < m_argc
&& '-' != *m_argv[ii+1] )
{
return m_argv[ii+1];
}
return NULL;
}
return NULL;
--_skip;
ii += _numParams;
}
}
else if (NULL != _long
&& '-' == *arg
&& 0 == stricmp(arg+1, _long) )
{
if (0 == _numParams)
if (0 == _skip)
{
return "";
}
else if (ii+_numParams < m_argc
&& '-' != *m_argv[ii+1] )
{
return m_argv[ii+1];
if (0 == _numParams)
{
return "";
}
else if (ii+_numParams < m_argc
&& '-' != *m_argv[ii+1] )
{
return m_argv[ii+1];
}
return NULL;
}
return NULL;
--_skip;
ii += _numParams;
}
}
}