diff options
author | Dominick Allen <djallen@librehumanitas.org> | 2024-09-22 10:19:15 -0500 |
---|---|---|
committer | Dominick Allen <djallen@librehumanitas.org> | 2024-09-22 10:19:15 -0500 |
commit | bf81e34921e3e30b05313efbcf5c9fa839cb7c05 (patch) | |
tree | b56a343e59164bc347232669e8bb808cf3c4f4ef /source/utf8_iterator.cpp |
Initial commit.
Diffstat (limited to 'source/utf8_iterator.cpp')
-rw-r--r-- | source/utf8_iterator.cpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/source/utf8_iterator.cpp b/source/utf8_iterator.cpp new file mode 100644 index 0000000..e439687 --- /dev/null +++ b/source/utf8_iterator.cpp @@ -0,0 +1,38 @@ +#include "utf8_iterator.hpp" + +namespace fud { + +std::optional<ExtUtf8> Utf8Iterator::peek() const +{ + if (m_index >= m_view.length()) { + return std::nullopt; + } + + auto utf8 = ExtUtf8::fromStringView(m_view, m_index); + + if (!utf8.valid()) { + return std::nullopt; + } + + return utf8; +} + +std::optional<ExtUtf8> Utf8Iterator::next() +{ + if (m_index >= m_view.length()) { + m_index = m_view.length(); + return std::nullopt; + } + + auto utf8 = ExtUtf8::fromStringView(m_view, m_index); + + if (!utf8.valid()) { + m_index = m_view.length(); + return std::nullopt; + } + + m_index += utf8.size(); + return utf8; +} + +} // namespace fud |