From: Christian P. <cp...@us...> - 2005-01-10 12:58:18
|
Update of /cvsroot/pclasses/pclasses2/src/Util In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13733/src/Util Modified Files: StringTool.cpp Log Message: Made upperCase(), lowerCase() honor the global locale Added upperCase(), lowerCase() taking a locale Added faster versions of trimString() (trimLeft(), trimRight(), trim()) Index: StringTool.cpp =================================================================== RCS file: /cvsroot/pclasses/pclasses2/src/Util/StringTool.cpp,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- StringTool.cpp 10 Jan 2005 02:36:15 -0000 1.8 +++ StringTool.cpp 10 Jan 2005 12:58:05 -0000 1.9 @@ -354,27 +354,75 @@ */ struct ToUpperTransform { - char operator() (char c) const { return std::toupper(c); } + const std::locale& _locale; + + ToUpperTransform(const std::locale& loc) + : _locale(loc) { } + + char operator() (char c) const { return std::toupper(c, _locale); } }; -std::string upperCase(const std::string& str) +std::string upperCase(const std::string& str, const std::locale& loc) { - std::string ret = str; - std::transform(ret.begin(), ret.end(), ret.begin(), ToUpperTransform()); + ToUpperTransform upper(loc); + std::string ret; + ret.resize(str.size()); + std::transform(str.begin(), str.end(), ret.begin(), upper); return ret; } +std::string upperCase(const std::string& str) +{ + return upperCase(str, std::locale()); +} + struct ToLowerTransform { - char operator() (char c) const { return std::tolower(c); } + const std::locale& _locale; + + ToLowerTransform(const std::locale& loc) + : _locale(loc) { } + + char operator() (char c) const { return std::tolower(c, _locale); } }; -std::string lowerCase(const std::string& str) +std::string lowerCase(const std::string& str, const std::locale& loc) { - std::string ret = str; - std::transform(ret.begin(), ret.end(), ret.begin(), ToLowerTransform()); + ToLowerTransform lower(loc); + std::string ret; + ret.resize(str.size()); + std::transform(str.begin(), str.end(), ret.begin(), lower); return ret; } + +std::string lowerCase(const std::string& str) +{ + return lowerCase(str, std::locale()); +} + +/* + I know ... we already have trimString() in here ... but i don't like + trimString()'s implementation. cproch +*/ + +void trimLeft(std::string& str) +{ + std::string::size_type nw = str.find_first_not_of(" \t\n\r"); + str.erase(0, nw); +} +void trimRight(std::string& str) +{ + std::string::size_type nw = str.find_last_not_of(" \t\n\r"); + str.erase(nw+1); +} + +void trim(std::string str) +{ + trimLeft(str); + trimRight(str); +} + + }} // P::StringTool |