summaryrefslogtreecommitdiffstats
path: root/lib.h
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2020-06-04 20:16:10 -0700
committerKaz Kylheku <kaz@kylheku.com>2020-06-04 20:16:10 -0700
commit977cad2eae706e7fc33abf57fdc837bce93901e4 (patch)
tree66bc3384ce753949113f8a4229ca6d2f29989682 /lib.h
parentf7b4b05012a9e40deca1bdc72b02638d0be5a386 (diff)
downloadtxr-977cad2eae706e7fc33abf57fdc837bce93901e4.tar.gz
txr-977cad2eae706e7fc33abf57fdc837bce93901e4.tar.bz2
txr-977cad2eae706e7fc33abf57fdc837bce93901e4.zip
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.
Diffstat (limited to 'lib.h')
-rw-r--r--lib.h5
1 files changed, 4 insertions, 1 deletions
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);