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 | f5f69b43bc71b6fc43b5d18fe68be50c315474af (patch) | |
tree | 5a1231a56c7bfda37fd282c37f22bb4e9fc21e6f | |
parent | 53f2486c71e67050df2c6f3a15c0cbb4341cbb84 (diff) | |
download | txr-f5f69b43bc71b6fc43b5d18fe68be50c315474af.tar.gz txr-f5f69b43bc71b6fc43b5d18fe68be50c315474af.tar.bz2 txr-f5f69b43bc71b6fc43b5d18fe68be50c315474af.zip |
carray-replace: use seq_iter.
* ffi.c (carray_replace): Use generic sequence iteration for
range replacement instead of separate list/vector code.
-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; |