Semi-working base for bgfx renderer
This commit is contained in:
Vendored
+188
@@ -0,0 +1,188 @@
|
||||
/*
|
||||
* Copyright 2010-2015 Branimir Karadzic. All rights reserved.
|
||||
* License: http://www.opensource.org/licenses/BSD-2-Clause
|
||||
*/
|
||||
|
||||
#ifndef BX_COMMANDLINE_H_HEADER_GUARD
|
||||
#define BX_COMMANDLINE_H_HEADER_GUARD
|
||||
|
||||
#include "bx.h"
|
||||
#include "string.h"
|
||||
|
||||
namespace bx
|
||||
{
|
||||
class CommandLine
|
||||
{
|
||||
public:
|
||||
CommandLine(int _argc, char const* const* _argv)
|
||||
: m_argc(_argc)
|
||||
, m_argv(_argv)
|
||||
{
|
||||
}
|
||||
|
||||
const char* findOption(const char* _long, const char* _default) const
|
||||
{
|
||||
const char* result = find('\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);
|
||||
return result == NULL ? _default : result;
|
||||
}
|
||||
|
||||
const char* findOption(const char* _long, int _numParams = 1) const
|
||||
{
|
||||
const char* result = find('\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);
|
||||
return result;
|
||||
}
|
||||
|
||||
bool hasArg(const char _short, const char* _long = NULL) const
|
||||
{
|
||||
const char* arg = findOption(_short, _long, 0);
|
||||
return NULL != arg;
|
||||
}
|
||||
|
||||
bool hasArg(const char* _long) const
|
||||
{
|
||||
const char* arg = findOption('\0', _long, 0);
|
||||
return NULL != arg;
|
||||
}
|
||||
|
||||
bool hasArg(const char*& _value, const char _short, const char* _long = NULL) const
|
||||
{
|
||||
const char* arg = findOption(_short, _long, 1);
|
||||
_value = arg;
|
||||
return NULL != arg;
|
||||
}
|
||||
|
||||
bool hasArg(int& _value, const char _short, const char* _long = NULL) const
|
||||
{
|
||||
const char* arg = findOption(_short, _long, 1);
|
||||
if (NULL != arg)
|
||||
{
|
||||
_value = atoi(arg);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool hasArg(unsigned int& _value, const char _short, const char* _long = NULL) const
|
||||
{
|
||||
const char* arg = findOption(_short, _long, 1);
|
||||
if (NULL != arg)
|
||||
{
|
||||
_value = atoi(arg);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool hasArg(float& _value, const char _short, const char* _long = NULL) const
|
||||
{
|
||||
const char* arg = findOption(_short, _long, 1);
|
||||
if (NULL != arg)
|
||||
{
|
||||
_value = float(atof(arg));
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool hasArg(double& _value, const char _short, const char* _long = NULL) const
|
||||
{
|
||||
const char* arg = findOption(_short, _long, 1);
|
||||
if (NULL != arg)
|
||||
{
|
||||
_value = atof(arg);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool hasArg(bool& _value, const char _short, const char* _long = NULL) const
|
||||
{
|
||||
const char* arg = findOption(_short, _long, 1);
|
||||
if (NULL != arg)
|
||||
{
|
||||
if ('0' == *arg || (0 == stricmp(arg, "false") ) )
|
||||
{
|
||||
_value = false;
|
||||
}
|
||||
else if ('0' != *arg || (0 == stricmp(arg, "true") ) )
|
||||
{
|
||||
_value = true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private:
|
||||
const char* find(const char _short, const char* _long, int _numParams) const
|
||||
{
|
||||
for (int ii = 0; ii < m_argc; ++ii)
|
||||
{
|
||||
const char* arg = m_argv[ii];
|
||||
if ('-' == *arg)
|
||||
{
|
||||
++arg;
|
||||
if (_short == *arg)
|
||||
{
|
||||
if (1 == strlen(arg) )
|
||||
{
|
||||
if (0 == _numParams)
|
||||
{
|
||||
return "";
|
||||
}
|
||||
else if (ii+_numParams < m_argc
|
||||
&& '-' != *m_argv[ii+1] )
|
||||
{
|
||||
return m_argv[ii+1];
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
else if (NULL != _long
|
||||
&& '-' == *arg
|
||||
&& 0 == stricmp(arg+1, _long) )
|
||||
{
|
||||
if (0 == _numParams)
|
||||
{
|
||||
return "";
|
||||
}
|
||||
else if (ii+_numParams < m_argc
|
||||
&& '-' != *m_argv[ii+1] )
|
||||
{
|
||||
return m_argv[ii+1];
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int m_argc;
|
||||
char const* const* m_argv;
|
||||
};
|
||||
|
||||
} // namespace bx
|
||||
|
||||
#endif /// BX_COMMANDLINE_H_HEADER_GUARD
|
||||
Reference in New Issue
Block a user