diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2017-02-07 18:45:03 +0100 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2017-02-08 18:33:32 +0100 |
| commit | 15b3e956ee905f5dc33395e9f6485c88d734f4d4 (patch) | |
| tree | 10cd405fbb1dd4bc953d870cf7cf63d412bcb586 /text-regex-tre.c | |
| parent | 34f980b539efdf4686e7b78e713c5c2dfcd428b7 (diff) | |
| download | vis-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.c | 10 |
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) { |
