diff options
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 |