summaryrefslogtreecommitdiff
path: root/source/utf8_iterator.cpp
diff options
context:
space:
mode:
authorDominick Allen <djallen@librehumanitas.org>2024-09-22 10:19:15 -0500
committerDominick Allen <djallen@librehumanitas.org>2024-09-22 10:19:15 -0500
commitbf81e34921e3e30b05313efbcf5c9fa839cb7c05 (patch)
treeb56a343e59164bc347232669e8bb808cf3c4f4ef /source/utf8_iterator.cpp
Initial commit.
Diffstat (limited to 'source/utf8_iterator.cpp')
-rw-r--r--source/utf8_iterator.cpp38
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