From 15b3e956ee905f5dc33395e9f6485c88d734f4d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Tue, 7 Feb 2017 18:45:03 +0100 Subject: 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. --- text-regex-tre.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'text-regex-tre.c') 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) { -- cgit v1.2.3