diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2019-06-18 06:36:13 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2019-06-18 06:36:13 -0700 |
commit | 8331e7f693366f7775ab107953678dc4909a4068 (patch) | |
tree | 5a1231a56c7bfda37fd282c37f22bb4e9fc21e6f /ffi.c | |
parent | e545f014c3e3336c929e0981948cc8f62423be7e (diff) | |
download | txr-8331e7f693366f7775ab107953678dc4909a4068.tar.gz txr-8331e7f693366f7775ab107953678dc4909a4068.tar.bz2 txr-8331e7f693366f7775ab107953678dc4909a4068.zip |
carray-replace: use seq_iter.
* ffi.c (carray_replace): Use generic sequence iteration for
range replacement instead of separate list/vector code.
Diffstat (limited to 'ffi.c')
-rw-r--r-- | ffi.c | 20 |
1 files changed, 5 insertions, 15 deletions
@@ -4934,6 +4934,8 @@ val carray_replace(val carray, val values, val from, val to) cnum vn = c_num(vlen); cnum sn; mem_t *ptr; + seq_iter_t item_iter; + seq_iter_init(self, &item_iter, values); if (fn < 0) fn = 0; @@ -4976,21 +4978,9 @@ val carray_replace(val carray, val values, val from, val to) } } - if (consp(values)) { - val iter; - - for (iter = values; fn < sn; iter = cdr(iter), fn++, ptr += elsize) - { - val newval = car(iter); - eltft->put(eltft, newval, ptr, self); - } - } else if (values) { - cnum i; - - for (i = 0; fn < sn; i++, fn++, ptr += elsize) { - val newval = ref(values, num_fast(i)); - eltft->put(eltft, newval, ptr, self); - } + for (; fn != tn; fn++, ptr += elsize) { + val item = seq_geti(&item_iter); + eltft->put(eltft, item, ptr, self); } return carray; |