Fixed compiler warning ( #81 ) and optimized the speed a little. Removed _cstr from Token class, use _str.c_str() instead.
This commit is contained in:
parent
d48671bdfb
commit
811d76eb31
|
@ -26,7 +26,6 @@
|
||||||
|
|
||||||
Token::Token() :
|
Token::Token() :
|
||||||
_str(""),
|
_str(""),
|
||||||
_cstr(0),
|
|
||||||
_isName(false),
|
_isName(false),
|
||||||
_isNumber(false),
|
_isNumber(false),
|
||||||
_isBoolean(false),
|
_isBoolean(false),
|
||||||
|
@ -40,14 +39,12 @@ Token::Token() :
|
||||||
|
|
||||||
Token::~Token()
|
Token::~Token()
|
||||||
{
|
{
|
||||||
std::free(_cstr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Token::str(const char s[])
|
void Token::str(const char s[])
|
||||||
{
|
{
|
||||||
_str = s;
|
_str = s;
|
||||||
std::free(_cstr);
|
|
||||||
_cstr = strdup(s);
|
|
||||||
_isName = bool(_str[0] == '_' || std::isalpha(_str[0]));
|
_isName = bool(_str[0] == '_' || std::isalpha(_str[0]));
|
||||||
_isNumber = bool(std::isdigit(_str[0]) != 0);
|
_isNumber = bool(std::isdigit(_str[0]) != 0);
|
||||||
if (_str == "true" || _str == "false")
|
if (_str == "true" || _str == "false")
|
||||||
|
@ -108,7 +105,7 @@ Token *Token::tokAt(int index)
|
||||||
const char *Token::strAt(int index) const
|
const char *Token::strAt(int index) const
|
||||||
{
|
{
|
||||||
const Token *tok = this->tokAt(index);
|
const Token *tok = this->tokAt(index);
|
||||||
return tok ? tok->_cstr : "";
|
return tok ? tok->_str.c_str() : "";
|
||||||
}
|
}
|
||||||
|
|
||||||
int Token::multiCompare(const char *haystack, const char *needle)
|
int Token::multiCompare(const char *haystack, const char *needle)
|
||||||
|
@ -191,7 +188,7 @@ bool Token::simpleMatch(const Token *tok, const char pattern[])
|
||||||
{
|
{
|
||||||
size_t length = static_cast<size_t>(next - current);
|
size_t length = static_cast<size_t>(next - current);
|
||||||
|
|
||||||
if (!tok || length != tok->_str.length() || strncmp(current, tok->_cstr, length))
|
if (!tok || length != tok->_str.length() || strncmp(current, tok->_str.c_str(), length))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
current = next;
|
current = next;
|
||||||
|
@ -322,7 +319,7 @@ bool Token::Match(const Token *tok, const char pattern[], unsigned int varid)
|
||||||
// Parse multi options, such as void|int|char (accept token which is one of these 3)
|
// Parse multi options, such as void|int|char (accept token which is one of these 3)
|
||||||
else if (strchr(str, '|') && (str[0] != '|' || strlen(str) > 2))
|
else if (strchr(str, '|') && (str[0] != '|' || strlen(str) > 2))
|
||||||
{
|
{
|
||||||
int res = multiCompare(str, tok->_cstr);
|
int res = multiCompare(str, tok->_str.c_str());
|
||||||
if (res == 0)
|
if (res == 0)
|
||||||
{
|
{
|
||||||
// Empty alternative matches, use the same token on next round
|
// Empty alternative matches, use the same token on next round
|
||||||
|
|
|
@ -36,17 +36,17 @@ public:
|
||||||
|
|
||||||
const char *aaaa() const
|
const char *aaaa() const
|
||||||
{
|
{
|
||||||
return _cstr;
|
return _str.c_str();
|
||||||
}
|
}
|
||||||
|
|
||||||
char aaaa0() const
|
char aaaa0() const
|
||||||
{
|
{
|
||||||
return _cstr[0];
|
return _str[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
char aaaa1() const
|
char aaaa1() const
|
||||||
{
|
{
|
||||||
return _cstr[1];
|
return _str[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -190,7 +190,6 @@ private:
|
||||||
void previous(Token *previous);
|
void previous(Token *previous);
|
||||||
|
|
||||||
std::string _str;
|
std::string _str;
|
||||||
char * _cstr;
|
|
||||||
bool _isName;
|
bool _isName;
|
||||||
bool _isNumber;
|
bool _isNumber;
|
||||||
bool _isBoolean;
|
bool _isBoolean;
|
||||||
|
|
Loading…
Reference in New Issue