Core/StringExt: Replace ptr + size by a view in IterateOnCodepoints parameter
Also increase buffer size to increase performance
This commit is contained in:
parent
8dab084037
commit
639f6708b0
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue