aboutsummaryrefslogtreecommitdiff
path: root/text-regex-tre.c
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2017-02-07 18:45:03 +0100
committerMarc André Tanner <mat@brain-dump.org>2017-02-08 18:33:32 +0100
commit15b3e956ee905f5dc33395e9f6485c88d734f4d4 (patch)
tree10cd405fbb1dd4bc953d870cf7cf63d412bcb586 /text-regex-tre.c
parent34f980b539efdf4686e7b78e713c5c2dfcd428b7 (diff)
downloadvis-15b3e956ee905f5dc33395e9f6485c88d734f4d4.tar.gz
vis-15b3e956ee905f5dc33395e9f6485c88d734f4d4.tar.xz
text: clean up iterator semantics
We now guarantee the existence of at least one non-sentinel piece at all time and allow iterators to recover from these delimiting pieces.
Diffstat (limited to 'text-regex-tre.c')
-rw-r--r--text-regex-tre.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/text-regex-tre.c b/text-regex-tre.c
index d45252a..0ac8b38 100644
--- a/text-regex-tre.c
+++ b/text-regex-tre.c
@@ -20,8 +20,14 @@ size_t text_regex_nsub(Regex *r) {
static int str_next_char(tre_char_t *c, unsigned int *pos_add, void *context) {
Regex *r = context;
- text_iterator_byte_get(&r->it, (char*)c);
- return r->it.pos < r->end && text_iterator_byte_next(&r->it, NULL) ? 0 : 1;
+ *pos_add = 1;
+ if (r->it.pos < r->end && text_iterator_byte_get(&r->it, (char*)c)) {
+ text_iterator_byte_next(&r->it, NULL);
+ return 0;
+ } else {
+ *c = '\0';
+ return 1;
+ }
}
static void str_rewind(size_t pos, void *context) {