diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2024-06-15 15:01:16 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2024-06-15 15:01:16 -0700 |
commit | 38a76d820decec3c703185b12a0f89bedec7716c (patch) | |
tree | b4a0dea1deb5004adbbf6d1cc88f90a550c2d4d7 /lib.h | |
parent | 08eef02fb98856550fdd6a2cdccfdb65dc0cfec8 (diff) | |
download | txr-38a76d820decec3c703185b12a0f89bedec7716c.tar.gz txr-38a76d820decec3c703185b12a0f89bedec7716c.tar.bz2 txr-38a76d820decec3c703185b12a0f89bedec7716c.zip |
New permi: iterator version of perm.
* eval.c (eval_init): Register permi intrinsic.
* combi.c (permi_get, permi_peek, permi_clone): New static
functions.
(permi_ops): New static structure.
(permi_iter): New static function.
(permi): New function.
* combi.h (permi): Declared.
* lib.h (struct seq_iter_ops): New function pointer, clone.
(seq_iter_ops_init, seq_iter_ops_init_nomark): Initialize
new member.
(seq_iter_ops_init_clone): New macro.
(seq_iter_cls): Existing external name declared.
(seq_iter_cobj_ops, seq_iter_mark_op): Previously internal
names declared external.
* lib.c (seq_iter_mark_op, seq_iter_cobj_ops): Static variables
become extern.
(seq_iter_clone): New static function.
(seq_iter_init_with_info): Use seq_iter_clone instead of assuming
we can trivially clone an iterator state bitwise.
Diffstat (limited to 'lib.h')
-rw-r--r-- | lib.h | 11 |
1 files changed, 9 insertions, 2 deletions
@@ -465,10 +465,13 @@ struct seq_iter_ops { int (*get)(struct seq_iter *, val *pval); int (*peek)(struct seq_iter *, val *pval); void (*mark)(struct seq_iter *); + void (*clone)(const struct seq_iter *, struct seq_iter *); }; -#define seq_iter_ops_init(get, peek) { get, peek, seq_iter_mark_op } -#define seq_iter_ops_init_nomark(get, peek) { get, peek, 0 } +#define seq_iter_ops_init(get, peek) { get, peek, seq_iter_mark_op, 0 } +#define seq_iter_ops_init_nomark(get, peek) { get, peek, 0, 0 } +#define seq_iter_ops_init_clone(get, peek, clone) \ + { get, peek, seq_iter_mark_op, clone } typedef struct seq_build { val obj; @@ -745,12 +748,16 @@ typedef unsigned long alloc_bytes_t; extern alloc_bytes_t malloc_bytes; extern alloc_bytes_t gc_bytes; +extern struct cobj_class *seq_iter_cls; +extern struct cobj_ops seq_iter_cobj_ops; + val identity(val obj); val built_in_type_p(val sym); val typeof(val obj); val subtypep(val sub, val sup); val typep(val obj, val type); seq_info_t seq_info(val cobj); +void seq_iter_mark_op(struct seq_iter *it); void seq_iter_init_with_info(val self, seq_iter_t *it, seq_info_t si, int support_rewind); void seq_iter_init(val self, seq_iter_t *it, val obj); |