forked from teamnwah/openmw-tes3coop
StringUtils: use the locale-unaware tolower function
There is no change in behaviour since we were using the C locale. The locale-aware tolower is much slower than the locale-unaware one. At least on Linux/GCC it calls dynamic_cast's, and is overall slower by an order of magnitude.
This commit is contained in:
parent
44dd62067e
commit
27e669296e
2 changed files with 4 additions and 15 deletions
|
@ -1,8 +0,0 @@
|
|||
#include "stringops.hpp"
|
||||
|
||||
namespace Misc
|
||||
{
|
||||
|
||||
std::locale StringUtils::mLocale = std::locale::classic();
|
||||
|
||||
}
|
|
@ -4,18 +4,15 @@
|
|||
#include <cctype>
|
||||
#include <string>
|
||||
#include <algorithm>
|
||||
#include <locale>
|
||||
|
||||
namespace Misc
|
||||
{
|
||||
class StringUtils
|
||||
{
|
||||
|
||||
static std::locale mLocale;
|
||||
struct ci
|
||||
{
|
||||
bool operator()(char x, char y) const {
|
||||
return std::tolower(x, StringUtils::mLocale) < std::tolower(y, StringUtils::mLocale);
|
||||
return tolower(x) < tolower(y);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -31,7 +28,7 @@ public:
|
|||
std::string::const_iterator xit = x.begin();
|
||||
std::string::const_iterator yit = y.begin();
|
||||
for (; xit != x.end(); ++xit, ++yit) {
|
||||
if (std::tolower(*xit, mLocale) != std::tolower(*yit, mLocale)) {
|
||||
if (tolower(*xit) != tolower(*yit)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -45,7 +42,7 @@ public:
|
|||
for(;xit != x.end() && yit != y.end() && len > 0;++xit,++yit,--len)
|
||||
{
|
||||
int res = *xit - *yit;
|
||||
if(res != 0 && std::tolower(*xit, mLocale) != std::tolower(*yit, mLocale))
|
||||
if(res != 0 && tolower(*xit) != tolower(*yit))
|
||||
return (res > 0) ? 1 : -1;
|
||||
}
|
||||
if(len > 0)
|
||||
|
@ -61,7 +58,7 @@ public:
|
|||
/// Transforms input string to lower case w/o copy
|
||||
static std::string &toLower(std::string &inout) {
|
||||
for (unsigned int i=0; i<inout.size(); ++i)
|
||||
inout[i] = std::tolower(inout[i], mLocale);
|
||||
inout[i] = tolower(inout[i]);
|
||||
return inout;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue