added: to convert/text.h:

int CompareNoCase(const StringType1 * str1_begin, const StringType1 * str1_end, const StringType2 * str2)



git-svn-id: svn://ttmath.org/publicrep/pikotools/trunk@1130 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
Tomasz Sowa 2018-10-24 16:25:47 +00:00
parent 605f24420e
commit 5fe920d591
1 changed files with 46 additions and 32 deletions

View File

@ -107,34 +107,7 @@ void ToUpper(std::wstring & s);
template<class StringType1, class StringType2>
bool EqualNoCase(const StringType1 * str1, const StringType2 * str2)
{
while( *str1 && *str2 && ToLower(*str1) == ToLower(*str2) )
{
++str1;
++str2;
}
if( *str1 == 0 && *str2 == 0 )
return true;
return false;
}
template<class StringType1, class StringType2>
bool EqualNoCase(const StringType1 & str1, const StringType2 & str2)
{
return EqualNoCase(str1.c_str(), str2.c_str());
}
template<class StringType1, class StringType2>
bool EqualNoCasep(const StringType1 * str1, const StringType2 * str2)
{
return EqualNoCase(str1, str2);
}
template<class StringType1, class StringType2> template<class StringType1, class StringType2>
@ -149,7 +122,7 @@ int CompareNoCase(const StringType1 * str1, const StringType2 * str2)
if( *str1 == 0 && *str2 == 0 ) if( *str1 == 0 && *str2 == 0 )
return 0; return 0;
return (int)ToLower(*str1) - (int)ToLower(*str2); return (int)ToLower(*str1) - (int)ToLower(*str2);
} }
@ -167,23 +140,64 @@ int CompareNoCasep(const StringType1 * str1, const StringType2 * str2)
} }
template<class StringType1, class StringType2> template<class StringType1, class StringType2>
bool EqualNoCase(const StringType1 * str1_begin, const StringType1 * str1_end, const StringType2 * str2) int CompareNoCase(const StringType1 * str1_begin, const StringType1 * str1_end, const StringType2 * str2)
{ {
while( str1_begin < str1_end && *str2 && PT::ToLower(*str1_begin) == PT::ToLower(*str2) ) while( str1_begin < str1_end && *str2 && ToLower(*str1_begin) == ToLower(*str2) )
{ {
++str1_begin; ++str1_begin;
++str2; ++str2;
} }
if( str1_begin == str1_end && *str2 == 0 ) if( str1_begin == str1_end && *str2 == 0 )
return true; return 0;
return false; wchar_t str1_char = 0;
if( str1_begin < str1_end )
str1_char = *str1_begin;
return (int)ToLower(str1_char) - (int)ToLower(*str2);
} }
template<class StringType1, class StringType2>
bool EqualNoCase(const StringType1 * str1, const StringType2 * str2)
{
return CompareNoCase(str1, str2) == 0;
}
template<class StringType1, class StringType2>
bool EqualNoCase(const StringType1 & str1, const StringType2 & str2)
{
return EqualNoCase(str1.c_str(), str2.c_str());
}
template<class StringType1, class StringType2>
bool EqualNoCasep(const StringType1 * str1, const StringType2 * str2)
{
return EqualNoCase(str1, str2);
}
template<class StringType1, class StringType2>
bool EqualNoCase(const StringType1 * str1_begin, const StringType1 * str1_end, const StringType2 * str2)
{
return CompareNoCase(str1_begin, str1_end, str2) == 0;
}
} }