From 639f6708b021f2f2f7f95499b4b577ffcdd31d75 Mon Sep 17 00:00:00 2001 From: SirLynix Date: Mon, 22 Jan 2024 17:02:26 +0100 Subject: [PATCH] Core/StringExt: Replace ptr + size by a view in IterateOnCodepoints parameter Also increase buffer size to increase performance --- include/Nazara/Core/StringExt.hpp | 2 +- src/Nazara/Core/StringExt.cpp | 8 ++++---- src/Nazara/Utility/Font.cpp | 6 +++--- src/Nazara/Utility/RichTextDrawer.cpp | 6 ++---- src/Nazara/Utility/SimpleTextDrawer.cpp | 7 ++----- 5 files changed, 12 insertions(+), 17 deletions(-) diff --git a/include/Nazara/Core/StringExt.hpp b/include/Nazara/Core/StringExt.hpp index 3d1b73244..5f80ffa23 100644 --- a/include/Nazara/Core/StringExt.hpp +++ b/include/Nazara/Core/StringExt.hpp @@ -35,7 +35,7 @@ namespace Nz inline bool IsNumber(std::string_view str); - NAZARA_CORE_API void IterateOnCodepoints(std::string_view str, FunctionRef callback); + NAZARA_CORE_API void IterateOnCodepoints(std::string_view str, FunctionRef callback); NAZARA_CORE_API bool MatchPattern(std::string_view str, std::string_view pattern); diff --git a/src/Nazara/Core/StringExt.cpp b/src/Nazara/Core/StringExt.cpp index a2f101682..063f60b15 100644 --- a/src/Nazara/Core/StringExt.cpp +++ b/src/Nazara/Core/StringExt.cpp @@ -260,9 +260,9 @@ namespace Nz return {}; } - void IterateOnCodepoints(std::string_view str, FunctionRef callback) + void IterateOnCodepoints(std::string_view str, FunctionRef callback) { - std::array buffer; + std::array buffer; std::size_t charCount = 0; utf8::unchecked::iterator it(str.data()); @@ -272,7 +272,7 @@ namespace Nz buffer[charCount++] = *it; if (charCount == buffer.size()) { - if (!callback(&buffer[0], charCount)) + if (!callback(std::u32string_view(&buffer[0], charCount))) return; charCount = 0; @@ -280,7 +280,7 @@ namespace Nz } if (charCount != 0) - callback(&buffer[0], charCount); + callback(std::u32string_view(&buffer[0], charCount)); } bool MatchPattern(std::string_view str, std::string_view pattern) diff --git a/src/Nazara/Utility/Font.cpp b/src/Nazara/Utility/Font.cpp index 10015e9ab..91f285592 100644 --- a/src/Nazara/Utility/Font.cpp +++ b/src/Nazara/Utility/Font.cpp @@ -263,10 +263,10 @@ namespace Nz UInt64 key = ComputeKey(characterSize, style, outlineThickness); 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) - PrecacheGlyph(glyphMap, characterSize, style, outlineThickness, characters[i]); + for (char32_t character : characters) + PrecacheGlyph(glyphMap, characterSize, style, outlineThickness, character); return true; }); diff --git a/src/Nazara/Utility/RichTextDrawer.cpp b/src/Nazara/Utility/RichTextDrawer.cpp index 0a3bdef55..78ee08417 100644 --- a/src/Nazara/Utility/RichTextDrawer.cpp +++ b/src/Nazara/Utility/RichTextDrawer.cpp @@ -402,12 +402,10 @@ namespace Nz 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) m_drawPos.x += font.GetKerning(characterSize, previousCharacter, character); diff --git a/src/Nazara/Utility/SimpleTextDrawer.cpp b/src/Nazara/Utility/SimpleTextDrawer.cpp index 68d1fbc7c..9a53f7e7a 100644 --- a/src/Nazara/Utility/SimpleTextDrawer.cpp +++ b/src/Nazara/Utility/SimpleTextDrawer.cpp @@ -187,13 +187,10 @@ namespace Nz const Font::SizeInfo& sizeInfo = m_font->GetSizeInfo(m_characterSize); - - 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 (m_previousCharacter != 0) m_drawPos.x += m_font->GetKerning(m_characterSize, m_previousCharacter, character);