mirror of
https://github.com/SFML/SFML.git
synced 2024-11-28 14:21:04 +08:00
Use correct iterator comparison
Switching the iterator comparison used lowers the requirement for iterators from *RandomAccessIterators* to *ForwardIterators*, which is a benefit. It is also more accurate; instead of saying "if `begin` is less than the end, stop." it states "if `begin` is not equal to end, stop." Additionally, the old '<' did not protect us from undefined behavior because it is undefined to compare two iterators relationally that are not: 1. past the end 2. within the array
This commit is contained in:
parent
d4ee28c441
commit
5ed16195b3
@ -168,7 +168,7 @@ template <typename In>
|
|||||||
std::size_t Utf<8>::count(In begin, In end)
|
std::size_t Utf<8>::count(In begin, In end)
|
||||||
{
|
{
|
||||||
std::size_t length = 0;
|
std::size_t length = 0;
|
||||||
while (begin < end)
|
while (begin != end)
|
||||||
{
|
{
|
||||||
begin = next(begin, end);
|
begin = next(begin, end);
|
||||||
++length;
|
++length;
|
||||||
@ -182,7 +182,7 @@ std::size_t Utf<8>::count(In begin, In end)
|
|||||||
template <typename In, typename Out>
|
template <typename In, typename Out>
|
||||||
Out Utf<8>::fromAnsi(In begin, In end, Out output, const std::locale& locale)
|
Out Utf<8>::fromAnsi(In begin, In end, Out output, const std::locale& locale)
|
||||||
{
|
{
|
||||||
while (begin < end)
|
while (begin != end)
|
||||||
{
|
{
|
||||||
const std::uint32_t codepoint = Utf<32>::decodeAnsi(*begin++, locale);
|
const std::uint32_t codepoint = Utf<32>::decodeAnsi(*begin++, locale);
|
||||||
output = encode(codepoint, output);
|
output = encode(codepoint, output);
|
||||||
@ -196,7 +196,7 @@ Out Utf<8>::fromAnsi(In begin, In end, Out output, const std::locale& locale)
|
|||||||
template <typename In, typename Out>
|
template <typename In, typename Out>
|
||||||
Out Utf<8>::fromWide(In begin, In end, Out output)
|
Out Utf<8>::fromWide(In begin, In end, Out output)
|
||||||
{
|
{
|
||||||
while (begin < end)
|
while (begin != end)
|
||||||
{
|
{
|
||||||
std::uint32_t codepoint = Utf<32>::decodeWide(*begin++);
|
std::uint32_t codepoint = Utf<32>::decodeWide(*begin++);
|
||||||
output = encode(codepoint, output);
|
output = encode(codepoint, output);
|
||||||
@ -212,7 +212,7 @@ Out Utf<8>::fromLatin1(In begin, In end, Out output)
|
|||||||
{
|
{
|
||||||
// Latin-1 is directly compatible with Unicode encodings,
|
// Latin-1 is directly compatible with Unicode encodings,
|
||||||
// and can thus be treated as (a sub-range of) UTF-32
|
// and can thus be treated as (a sub-range of) UTF-32
|
||||||
while (begin < end)
|
while (begin != end)
|
||||||
output = encode(*begin++, output);
|
output = encode(*begin++, output);
|
||||||
|
|
||||||
return output;
|
return output;
|
||||||
@ -223,7 +223,7 @@ Out Utf<8>::fromLatin1(In begin, In end, Out output)
|
|||||||
template <typename In, typename Out>
|
template <typename In, typename Out>
|
||||||
Out Utf<8>::toAnsi(In begin, In end, Out output, char replacement, const std::locale& locale)
|
Out Utf<8>::toAnsi(In begin, In end, Out output, char replacement, const std::locale& locale)
|
||||||
{
|
{
|
||||||
while (begin < end)
|
while (begin != end)
|
||||||
{
|
{
|
||||||
std::uint32_t codepoint = 0;
|
std::uint32_t codepoint = 0;
|
||||||
begin = decode(begin, end, codepoint);
|
begin = decode(begin, end, codepoint);
|
||||||
@ -238,7 +238,7 @@ Out Utf<8>::toAnsi(In begin, In end, Out output, char replacement, const std::lo
|
|||||||
template <typename In, typename Out>
|
template <typename In, typename Out>
|
||||||
Out Utf<8>::toWide(In begin, In end, Out output, wchar_t replacement)
|
Out Utf<8>::toWide(In begin, In end, Out output, wchar_t replacement)
|
||||||
{
|
{
|
||||||
while (begin < end)
|
while (begin != end)
|
||||||
{
|
{
|
||||||
std::uint32_t codepoint = 0;
|
std::uint32_t codepoint = 0;
|
||||||
begin = decode(begin, end, codepoint);
|
begin = decode(begin, end, codepoint);
|
||||||
@ -255,7 +255,7 @@ Out Utf<8>::toLatin1(In begin, In end, Out output, char replacement)
|
|||||||
{
|
{
|
||||||
// Latin-1 is directly compatible with Unicode encodings,
|
// Latin-1 is directly compatible with Unicode encodings,
|
||||||
// and can thus be treated as (a sub-range of) UTF-32
|
// and can thus be treated as (a sub-range of) UTF-32
|
||||||
while (begin < end)
|
while (begin != end)
|
||||||
{
|
{
|
||||||
std::uint32_t codepoint = 0;
|
std::uint32_t codepoint = 0;
|
||||||
begin = decode(begin, end, codepoint);
|
begin = decode(begin, end, codepoint);
|
||||||
@ -278,7 +278,7 @@ Out Utf<8>::toUtf8(In begin, In end, Out output)
|
|||||||
template <typename In, typename Out>
|
template <typename In, typename Out>
|
||||||
Out Utf<8>::toUtf16(In begin, In end, Out output)
|
Out Utf<8>::toUtf16(In begin, In end, Out output)
|
||||||
{
|
{
|
||||||
while (begin < end)
|
while (begin != end)
|
||||||
{
|
{
|
||||||
std::uint32_t codepoint = 0;
|
std::uint32_t codepoint = 0;
|
||||||
begin = decode(begin, end, codepoint);
|
begin = decode(begin, end, codepoint);
|
||||||
@ -293,7 +293,7 @@ Out Utf<8>::toUtf16(In begin, In end, Out output)
|
|||||||
template <typename In, typename Out>
|
template <typename In, typename Out>
|
||||||
Out Utf<8>::toUtf32(In begin, In end, Out output)
|
Out Utf<8>::toUtf32(In begin, In end, Out output)
|
||||||
{
|
{
|
||||||
while (begin < end)
|
while (begin != end)
|
||||||
{
|
{
|
||||||
std::uint32_t codepoint = 0;
|
std::uint32_t codepoint = 0;
|
||||||
begin = decode(begin, end, codepoint);
|
begin = decode(begin, end, codepoint);
|
||||||
@ -313,7 +313,7 @@ In Utf<16>::decode(In begin, In end, std::uint32_t& output, std::uint32_t replac
|
|||||||
// If it's a surrogate pair, first convert to a single UTF-32 character
|
// If it's a surrogate pair, first convert to a single UTF-32 character
|
||||||
if ((first >= 0xD800) && (first <= 0xDBFF))
|
if ((first >= 0xD800) && (first <= 0xDBFF))
|
||||||
{
|
{
|
||||||
if (begin < end)
|
if (begin != end)
|
||||||
{
|
{
|
||||||
const std::uint32_t second = *begin++;
|
const std::uint32_t second = *begin++;
|
||||||
if ((second >= 0xDC00) && (second <= 0xDFFF))
|
if ((second >= 0xDC00) && (second <= 0xDFFF))
|
||||||
@ -395,7 +395,7 @@ template <typename In>
|
|||||||
std::size_t Utf<16>::count(In begin, In end)
|
std::size_t Utf<16>::count(In begin, In end)
|
||||||
{
|
{
|
||||||
std::size_t length = 0;
|
std::size_t length = 0;
|
||||||
while (begin < end)
|
while (begin != end)
|
||||||
{
|
{
|
||||||
begin = next(begin, end);
|
begin = next(begin, end);
|
||||||
++length;
|
++length;
|
||||||
@ -409,7 +409,7 @@ std::size_t Utf<16>::count(In begin, In end)
|
|||||||
template <typename In, typename Out>
|
template <typename In, typename Out>
|
||||||
Out Utf<16>::fromAnsi(In begin, In end, Out output, const std::locale& locale)
|
Out Utf<16>::fromAnsi(In begin, In end, Out output, const std::locale& locale)
|
||||||
{
|
{
|
||||||
while (begin < end)
|
while (begin != end)
|
||||||
{
|
{
|
||||||
std::uint32_t codepoint = Utf<32>::decodeAnsi(*begin++, locale);
|
std::uint32_t codepoint = Utf<32>::decodeAnsi(*begin++, locale);
|
||||||
output = encode(codepoint, output);
|
output = encode(codepoint, output);
|
||||||
@ -423,7 +423,7 @@ Out Utf<16>::fromAnsi(In begin, In end, Out output, const std::locale& locale)
|
|||||||
template <typename In, typename Out>
|
template <typename In, typename Out>
|
||||||
Out Utf<16>::fromWide(In begin, In end, Out output)
|
Out Utf<16>::fromWide(In begin, In end, Out output)
|
||||||
{
|
{
|
||||||
while (begin < end)
|
while (begin != end)
|
||||||
{
|
{
|
||||||
std::uint32_t codepoint = Utf<32>::decodeWide(*begin++);
|
std::uint32_t codepoint = Utf<32>::decodeWide(*begin++);
|
||||||
output = encode(codepoint, output);
|
output = encode(codepoint, output);
|
||||||
@ -447,7 +447,7 @@ Out Utf<16>::fromLatin1(In begin, In end, Out output)
|
|||||||
template <typename In, typename Out>
|
template <typename In, typename Out>
|
||||||
Out Utf<16>::toAnsi(In begin, In end, Out output, char replacement, const std::locale& locale)
|
Out Utf<16>::toAnsi(In begin, In end, Out output, char replacement, const std::locale& locale)
|
||||||
{
|
{
|
||||||
while (begin < end)
|
while (begin != end)
|
||||||
{
|
{
|
||||||
std::uint32_t codepoint = 0;
|
std::uint32_t codepoint = 0;
|
||||||
begin = decode(begin, end, codepoint);
|
begin = decode(begin, end, codepoint);
|
||||||
@ -462,7 +462,7 @@ Out Utf<16>::toAnsi(In begin, In end, Out output, char replacement, const std::l
|
|||||||
template <typename In, typename Out>
|
template <typename In, typename Out>
|
||||||
Out Utf<16>::toWide(In begin, In end, Out output, wchar_t replacement)
|
Out Utf<16>::toWide(In begin, In end, Out output, wchar_t replacement)
|
||||||
{
|
{
|
||||||
while (begin < end)
|
while (begin != end)
|
||||||
{
|
{
|
||||||
std::uint32_t codepoint = 0;
|
std::uint32_t codepoint = 0;
|
||||||
begin = decode(begin, end, codepoint);
|
begin = decode(begin, end, codepoint);
|
||||||
@ -479,7 +479,7 @@ Out Utf<16>::toLatin1(In begin, In end, Out output, char replacement)
|
|||||||
{
|
{
|
||||||
// Latin-1 is directly compatible with Unicode encodings,
|
// Latin-1 is directly compatible with Unicode encodings,
|
||||||
// and can thus be treated as (a sub-range of) UTF-32
|
// and can thus be treated as (a sub-range of) UTF-32
|
||||||
while (begin < end)
|
while (begin != end)
|
||||||
{
|
{
|
||||||
*output++ = *begin < 256 ? static_cast<char>(*begin) : replacement;
|
*output++ = *begin < 256 ? static_cast<char>(*begin) : replacement;
|
||||||
++begin;
|
++begin;
|
||||||
@ -493,7 +493,7 @@ Out Utf<16>::toLatin1(In begin, In end, Out output, char replacement)
|
|||||||
template <typename In, typename Out>
|
template <typename In, typename Out>
|
||||||
Out Utf<16>::toUtf8(In begin, In end, Out output)
|
Out Utf<16>::toUtf8(In begin, In end, Out output)
|
||||||
{
|
{
|
||||||
while (begin < end)
|
while (begin != end)
|
||||||
{
|
{
|
||||||
std::uint32_t codepoint = 0;
|
std::uint32_t codepoint = 0;
|
||||||
begin = decode(begin, end, codepoint);
|
begin = decode(begin, end, codepoint);
|
||||||
@ -516,7 +516,7 @@ Out Utf<16>::toUtf16(In begin, In end, Out output)
|
|||||||
template <typename In, typename Out>
|
template <typename In, typename Out>
|
||||||
Out Utf<16>::toUtf32(In begin, In end, Out output)
|
Out Utf<16>::toUtf32(In begin, In end, Out output)
|
||||||
{
|
{
|
||||||
while (begin < end)
|
while (begin != end)
|
||||||
{
|
{
|
||||||
std::uint32_t codepoint = 0;
|
std::uint32_t codepoint = 0;
|
||||||
begin = decode(begin, end, codepoint);
|
begin = decode(begin, end, codepoint);
|
||||||
@ -565,7 +565,7 @@ std::size_t Utf<32>::count(In begin, In end)
|
|||||||
template <typename In, typename Out>
|
template <typename In, typename Out>
|
||||||
Out Utf<32>::fromAnsi(In begin, In end, Out output, const std::locale& locale)
|
Out Utf<32>::fromAnsi(In begin, In end, Out output, const std::locale& locale)
|
||||||
{
|
{
|
||||||
while (begin < end)
|
while (begin != end)
|
||||||
*output++ = decodeAnsi(*begin++, locale);
|
*output++ = decodeAnsi(*begin++, locale);
|
||||||
|
|
||||||
return output;
|
return output;
|
||||||
@ -576,7 +576,7 @@ Out Utf<32>::fromAnsi(In begin, In end, Out output, const std::locale& locale)
|
|||||||
template <typename In, typename Out>
|
template <typename In, typename Out>
|
||||||
Out Utf<32>::fromWide(In begin, In end, Out output)
|
Out Utf<32>::fromWide(In begin, In end, Out output)
|
||||||
{
|
{
|
||||||
while (begin < end)
|
while (begin != end)
|
||||||
*output++ = decodeWide(*begin++);
|
*output++ = decodeWide(*begin++);
|
||||||
|
|
||||||
return output;
|
return output;
|
||||||
@ -597,7 +597,7 @@ Out Utf<32>::fromLatin1(In begin, In end, Out output)
|
|||||||
template <typename In, typename Out>
|
template <typename In, typename Out>
|
||||||
Out Utf<32>::toAnsi(In begin, In end, Out output, char replacement, const std::locale& locale)
|
Out Utf<32>::toAnsi(In begin, In end, Out output, char replacement, const std::locale& locale)
|
||||||
{
|
{
|
||||||
while (begin < end)
|
while (begin != end)
|
||||||
output = encodeAnsi(*begin++, output, replacement, locale);
|
output = encodeAnsi(*begin++, output, replacement, locale);
|
||||||
|
|
||||||
return output;
|
return output;
|
||||||
@ -608,7 +608,7 @@ Out Utf<32>::toAnsi(In begin, In end, Out output, char replacement, const std::l
|
|||||||
template <typename In, typename Out>
|
template <typename In, typename Out>
|
||||||
Out Utf<32>::toWide(In begin, In end, Out output, wchar_t replacement)
|
Out Utf<32>::toWide(In begin, In end, Out output, wchar_t replacement)
|
||||||
{
|
{
|
||||||
while (begin < end)
|
while (begin != end)
|
||||||
output = encodeWide(*begin++, output, replacement);
|
output = encodeWide(*begin++, output, replacement);
|
||||||
|
|
||||||
return output;
|
return output;
|
||||||
@ -621,7 +621,7 @@ Out Utf<32>::toLatin1(In begin, In end, Out output, char replacement)
|
|||||||
{
|
{
|
||||||
// Latin-1 is directly compatible with Unicode encodings,
|
// Latin-1 is directly compatible with Unicode encodings,
|
||||||
// and can thus be treated as (a sub-range of) UTF-32
|
// and can thus be treated as (a sub-range of) UTF-32
|
||||||
while (begin < end)
|
while (begin != end)
|
||||||
{
|
{
|
||||||
*output++ = *begin < 256 ? static_cast<char>(*begin) : replacement;
|
*output++ = *begin < 256 ? static_cast<char>(*begin) : replacement;
|
||||||
++begin;
|
++begin;
|
||||||
@ -635,7 +635,7 @@ Out Utf<32>::toLatin1(In begin, In end, Out output, char replacement)
|
|||||||
template <typename In, typename Out>
|
template <typename In, typename Out>
|
||||||
Out Utf<32>::toUtf8(In begin, In end, Out output)
|
Out Utf<32>::toUtf8(In begin, In end, Out output)
|
||||||
{
|
{
|
||||||
while (begin < end)
|
while (begin != end)
|
||||||
output = Utf<8>::encode(*begin++, output);
|
output = Utf<8>::encode(*begin++, output);
|
||||||
|
|
||||||
return output;
|
return output;
|
||||||
@ -645,7 +645,7 @@ Out Utf<32>::toUtf8(In begin, In end, Out output)
|
|||||||
template <typename In, typename Out>
|
template <typename In, typename Out>
|
||||||
Out Utf<32>::toUtf16(In begin, In end, Out output)
|
Out Utf<32>::toUtf16(In begin, In end, Out output)
|
||||||
{
|
{
|
||||||
while (begin < end)
|
while (begin != end)
|
||||||
output = Utf<16>::encode(*begin++, output);
|
output = Utf<16>::encode(*begin++, output);
|
||||||
|
|
||||||
return output;
|
return output;
|
||||||
|
@ -146,7 +146,7 @@ void Image::resize(Vector2u size, Color color)
|
|||||||
// Fill it with the specified color
|
// Fill it with the specified color
|
||||||
std::uint8_t* ptr = newPixels.data();
|
std::uint8_t* ptr = newPixels.data();
|
||||||
std::uint8_t* end = ptr + newPixels.size();
|
std::uint8_t* end = ptr + newPixels.size();
|
||||||
while (ptr < end)
|
while (ptr != end)
|
||||||
{
|
{
|
||||||
*ptr++ = color.r;
|
*ptr++ = color.r;
|
||||||
*ptr++ = color.g;
|
*ptr++ = color.g;
|
||||||
@ -424,7 +424,7 @@ void Image::createMaskFromColor(Color color, std::uint8_t alpha)
|
|||||||
// Replace the alpha of the pixels that match the transparent color
|
// Replace the alpha of the pixels that match the transparent color
|
||||||
std::uint8_t* ptr = m_pixels.data();
|
std::uint8_t* ptr = m_pixels.data();
|
||||||
std::uint8_t* end = ptr + m_pixels.size();
|
std::uint8_t* end = ptr + m_pixels.size();
|
||||||
while (ptr < end)
|
while (ptr != end)
|
||||||
{
|
{
|
||||||
if ((ptr[0] == color.r) && (ptr[1] == color.g) && (ptr[2] == color.b) && (ptr[3] == color.a))
|
if ((ptr[0] == color.r) && (ptr[1] == color.g) && (ptr[2] == color.b) && (ptr[3] == color.a))
|
||||||
ptr[3] = alpha;
|
ptr[3] = alpha;
|
||||||
|
Loading…
Reference in New Issue
Block a user