summaryrefslogtreecommitdiff
path: root/source/utf8_iterator.cpp
diff options
context:
space:
mode:
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