@ -4,18 +4,15 @@
# include <cctype>
# include <cctype>
# include <string>
# include <string>
# include <algorithm>
# include <algorithm>
# include <locale>
namespace Misc
namespace Misc
{
{
class StringUtils
class StringUtils
{
{
static std : : locale mLocale ;
struct ci
struct ci
{
{
bool operator ( ) ( char x , char y ) const {
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 xit = x . begin ( ) ;
std : : string : : const_iterator yit = y . begin ( ) ;
std : : string : : const_iterator yit = y . begin ( ) ;
for ( ; xit ! = x . end ( ) ; + + xit , + + yit ) {
for ( ; xit ! = x . end ( ) ; + + xit , + + yit ) {
if ( std: : tolower( * xit , mLocale ) ! = std: : tolower( * yit , mLocale ) ) {
if ( tolower( * xit ) ! = tolower( * yit ) ) {
return false ;
return false ;
}
}
}
}
@ -45,7 +42,7 @@ public:
for ( ; xit ! = x . end ( ) & & yit ! = y . end ( ) & & len > 0 ; + + xit , + + yit , - - len )
for ( ; xit ! = x . end ( ) & & yit ! = y . end ( ) & & len > 0 ; + + xit , + + yit , - - len )
{
{
int res = * xit - * yit ;
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 ;
return ( res > 0 ) ? 1 : - 1 ;
}
}
if ( len > 0 )
if ( len > 0 )
@ -61,7 +58,7 @@ public:
/// Transforms input string to lower case w/o copy
/// Transforms input string to lower case w/o copy
static std : : string & toLower ( std : : string & inout ) {
static std : : string & toLower ( std : : string & inout ) {
for ( unsigned int i = 0 ; i < inout . size ( ) ; + + i )
for ( unsigned int i = 0 ; i < inout . size ( ) ; + + i )
inout [ i ] = std: : tolower( inout [ i ] , mLocale ) ;
inout [ i ] = tolower( inout [ i ] ) ;
return inout ;
return inout ;
}
}