summaryrefslogtreecommitdiffstats
path: root/lib.h
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2020-06-03 22:32:34 -0700
committerKaz Kylheku <kaz@kylheku.com>2020-06-03 22:32:34 -0700
commitfff34360b061c93926826945d6c570da3c2fbcca (patch)
tree83c7e7b503eb18344f2a1c961f4405d1ba527f1b /lib.h
parent91c85dc6a85bef1c62743bd278ebeb8914bf8b4b (diff)
downloadtxr-fff34360b061c93926826945d6c570da3c2fbcca.tar.gz
txr-fff34360b061c93926826945d6c570da3c2fbcca.tar.bz2
txr-fff34360b061c93926826945d6c570da3c2fbcca.zip
seq_iter: integers and ranges become iterable.
I think with the iter-begin API, we have the the "Maxwell's Equations of Iteration". This not only works well for conses, but it extends to numbers and ranges. * lib.h (seq_iter_t): New union member ul, containing a new member lim. existing len member moved into ul union. * lib.c (seq_iter_get_vec, seq_iter_peek_vec): Adjust access of len, now wrapped in union. (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, seq_iter_get_chr, seq_iter_peek_chr, seq_iter_get_num, seq_iter_peek_num): New static functions. (seq_iter_init_with_info): Support RNG object, further classifying the iteration based on the type of the from element. Support numbers and characters as iterable. (iter_begin, iter_more, iter_item, iter_step, iter_reset): Support numbers directly as unencapsulated iterators.
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 37180204..3463969b 100644
--- a/lib.h
+++ b/lib.h
@@ -391,7 +391,10 @@ typedef struct seq_iter {
val iter;
cnum index;
} ui;
- cnum len;
+ union {
+ val lim;
+ cnum len;
+ } ul;
int (*get)(struct seq_iter *, val *pval);
int (*peek)(struct seq_iter *, val *pval);
} seq_iter_t;