From 977cad2eae706e7fc33abf57fdc837bce93901e4 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Thu, 4 Jun 2020 20:16:10 -0700 Subject: seq_iter: support reverse iteration for ranges. * lib.h (seq_iter_t): Add some union members to ui and ul for use with ranges. The purpose of this is to have separate naming for the iteration variables for ranges. * lib.c (seq_iter_get_range_cnum, seq_iter_peek_range_cnum, seq_iter_get_range_chr, seq_iter_peek_range_chr, seq_iter_get_range_bignum, seq_iter_peek_range_bignum): Use new union member names for clarity. (seq_iter_get_rev_range_cnum, seq_iter_peek_rev_range_cnum, seq_iter_get_rev_range_chr, seq_iter_peek_rev_range_chr, seq_iter_get_rev_range_bignum, seq_iter_peek_rev_range_bignum): New static functions. (seq_iter_with_init_info): Drop obj argument since the si argument has the object. Add handling for empty and reversed ranges. Also convert unbounded ranges like N..t and N..: to just N, recursively. Use new union member names. (seq_iter_init, seq_iter_init_with_rewind, iter_begin, iter_reset): Follow elimination of argument in seq_iter_init_with_info. --- lib.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'lib.h') diff --git a/lib.h b/lib.h index 9eb0510b..770fefc7 100644 --- a/lib.h +++ b/lib.h @@ -390,10 +390,13 @@ typedef struct seq_iter { union { val iter; cnum index; + val vn; + cnum cn; } ui; union { - val lim; cnum len; + val vbound; + cnum cbound; } ul; int (*get)(struct seq_iter *, val *pval); int (*peek)(struct seq_iter *, val *pval); -- cgit v1.2.3