Core/StringExt: Replace ptr + size by a view in IterateOnCodepoints parameter

Also increase buffer size to increase performance
This commit is contained in:
SirLynix 2024-01-22 17:02:26 +01:00
parent 8dab084037
commit 639f6708b0
5 changed files with 12 additions and 17 deletions

View File

@ -35,7 +35,7 @@ namespace Nz
inline bool IsNumber(std::string_view str); inline bool IsNumber(std::string_view str);
NAZARA_CORE_API void IterateOnCodepoints(std::string_view str, FunctionRef<bool(const char32_t* characters, std::size_t characterCount)> callback); NAZARA_CORE_API void IterateOnCodepoints(std::string_view str, FunctionRef<bool(std::u32string_view characters)> callback);
NAZARA_CORE_API bool MatchPattern(std::string_view str, std::string_view pattern); NAZARA_CORE_API bool MatchPattern(std::string_view str, std::string_view pattern);

View File

@ -260,9 +260,9 @@ namespace Nz
return {}; return {};
} }
void IterateOnCodepoints(std::string_view str, FunctionRef<bool(const char32_t* characters, std::size_t characterCount)> callback) void IterateOnCodepoints(std::string_view str, FunctionRef<bool(std::u32string_view characters)> callback)
{ {
std::array<char32_t, 32> buffer; std::array<char32_t, 128> buffer;
std::size_t charCount = 0; std::size_t charCount = 0;
utf8::unchecked::iterator<const char*> it(str.data()); utf8::unchecked::iterator<const char*> it(str.data());
@ -272,7 +272,7 @@ namespace Nz
buffer[charCount++] = *it; buffer[charCount++] = *it;
if (charCount == buffer.size()) if (charCount == buffer.size())
{ {
if (!callback(&buffer[0], charCount)) if (!callback(std::u32string_view(&buffer[0], charCount)))
return; return;
charCount = 0; charCount = 0;
@ -280,7 +280,7 @@ namespace Nz
} }
if (charCount != 0) if (charCount != 0)
callback(&buffer[0], charCount); callback(std::u32string_view(&buffer[0], charCount));
} }
bool MatchPattern(std::string_view str, std::string_view pattern) bool MatchPattern(std::string_view str, std::string_view pattern)

View File

@ -263,10 +263,10 @@ namespace Nz
UInt64 key = ComputeKey(characterSize, style, outlineThickness); UInt64 key = ComputeKey(characterSize, style, outlineThickness);
auto& glyphMap = m_glyphes[key]; auto& glyphMap = m_glyphes[key];
IterateOnCodepoints(characterSet, [&](const char32_t* characters, std::size_t characterCount) IterateOnCodepoints(characterSet, [&](std::u32string_view characters)
{ {
for (std::size_t i = 0; i < characterCount; ++i) for (char32_t character : characters)
PrecacheGlyph(glyphMap, characterSize, style, outlineThickness, characters[i]); PrecacheGlyph(glyphMap, characterSize, style, outlineThickness, character);
return true; return true;
}); });

View File

@ -402,12 +402,10 @@ namespace Nz
m_lines.back().bounds.height += heightDifference; m_lines.back().bounds.height += heightDifference;
} }
IterateOnCodepoints(text, [&](const char32_t* characters, std::size_t characterCount) IterateOnCodepoints(text, [&](std::u32string_view characters)
{ {
for (std::size_t i = 0; i < characterCount; ++i) for (char32_t character : characters)
{ {
char32_t character = characters[i];
if (previousCharacter != 0) if (previousCharacter != 0)
m_drawPos.x += font.GetKerning(characterSize, previousCharacter, character); m_drawPos.x += font.GetKerning(characterSize, previousCharacter, character);

View File

@ -187,13 +187,10 @@ namespace Nz
const Font::SizeInfo& sizeInfo = m_font->GetSizeInfo(m_characterSize); const Font::SizeInfo& sizeInfo = m_font->GetSizeInfo(m_characterSize);
IterateOnCodepoints(text, [&](std::u32string_view characters)
IterateOnCodepoints(text, [&](const char32_t* characters, std::size_t characterCount)
{ {
for (std::size_t i = 0; i < characterCount; ++i) for (char32_t character : characters)
{ {
char32_t character = characters[i];
if (m_previousCharacter != 0) if (m_previousCharacter != 0)
m_drawPos.x += m_font->GetKerning(m_characterSize, m_previousCharacter, character); m_drawPos.x += m_font->GetKerning(m_characterSize, m_previousCharacter, character);