summaryrefslogtreecommitdiffhomepage
path: root/include/stc/csview.h
diff options
context:
space:
mode:
authorTyge Løvset <[email protected]>2022-08-10 14:55:01 +0200
committerTyge Løvset <[email protected]>2022-08-10 14:55:01 +0200
commit4fe41778b4429c4974166e5ae531577dba22bed5 (patch)
tree5f47a376aec6d1fb0b1c5da7cf109623b7d3ed98 /include/stc/csview.h
parent8eea6dfb61e9922de5940be975f4a51dcf4a62a3 (diff)
downloadSTC-modified-4fe41778b4429c4974166e5ae531577dba22bed5.tar.gz
STC-modified-4fe41778b4429c4974166e5ae531577dba22bed5.zip
Fixed iters for carr2/carr3 and cstr/csview.
Diffstat (limited to 'include/stc/csview.h')
-rw-r--r--include/stc/csview.h20
1 files changed, 13 insertions, 7 deletions
diff --git a/include/stc/csview.h b/include/stc/csview.h
index ef545bf2..c48c6ae6 100644
--- a/include/stc/csview.h
+++ b/include/stc/csview.h
@@ -69,15 +69,21 @@ STC_INLINE csview csview_slice(csview sv, size_t p1, size_t p2) {
return sv;
}
-/* iterator */
-STC_INLINE csview_iter csview_begin(const csview* self)
- { return c_make(csview_iter){.u8 = {{self->str, utf8_chr_size(self->str)}}}; }
+/* utf8 iterator */
+STC_INLINE csview_iter csview_begin(const csview* self) {
+ if (!self->size) return c_make(csview_iter){NULL};
+ return c_make(csview_iter){.u8 = {{self->str, utf8_chr_size(self->str)}, self->str + self->size}};
+}
+
+STC_INLINE csview_iter csview_end(const csview* self)
+ { return c_make(csview_iter){.u8 = {{NULL}, self->str + self->size}}; }
-STC_INLINE csview_iter csview_end(const csview* self)
- { return c_make(csview_iter){self->str + self->size}; }
+STC_INLINE void csview_next(csview_iter* it) {
+ it->ref += it->u8.chr.size;
+ it->u8.chr.size = utf8_chr_size(it->ref);
+ if (it->ref == it->u8._end) it->ref = NULL;
+}
-STC_INLINE void csview_next(csview_iter* it)
- { it->ref += it->u8.chr.size; it->u8.chr.size = utf8_chr_size(it->ref); }
/* utf8 */
STC_INLINE size_t csview_u8_size(csview sv)