From bf81e34921e3e30b05313efbcf5c9fa839cb7c05 Mon Sep 17 00:00:00 2001 From: Dominick Allen Date: Sun, 22 Sep 2024 10:19:15 -0500 Subject: Initial commit. --- source/utf8_iterator.cpp | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 source/utf8_iterator.cpp (limited to 'source/utf8_iterator.cpp') 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 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 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 -- cgit v1.2.3