mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-07-02 23:50:47 +02:00
Avoid array API in make-srfi-4-vector
* libguile/bytevector.h: publish SCM_BYTEVECTOR_TYPE_SIZE, bytevector_ref_fns and bytevector_set_fns from libguile/bytevector.c. * libguile/bytevector.c: bv_handle_ref, bv_handle_set: prefer SCM_BYTEVECTOR_TYPE_SIZE to scm_array_handle_uniform_element_size. * libguile/srfi-4.c: scm_make_srfi_4_vector: don't use array handles.
This commit is contained in:
parent
c9b62794e0
commit
ecd6c04527
3 changed files with 23 additions and 26 deletions
|
@ -252,7 +252,8 @@ SCM_DEFINE (scm_make_srfi_4_vector, "make-srfi-4-vector", 2, 1, 0,
|
|||
case SCM_ARRAY_ELEMENT_TYPE_C32:
|
||||
case SCM_ARRAY_ELEMENT_TYPE_C64:
|
||||
{
|
||||
SCM ret = scm_i_make_typed_bytevector (scm_to_size_t (len), i);
|
||||
size_t clen = scm_to_size_t (len);
|
||||
SCM ret = scm_i_make_typed_bytevector (clen, i);
|
||||
|
||||
if (SCM_UNBNDP (fill) || scm_is_eq (len, SCM_INUM0))
|
||||
; /* pass */
|
||||
|
@ -261,19 +262,12 @@ SCM_DEFINE (scm_make_srfi_4_vector, "make-srfi-4-vector", 2, 1, 0,
|
|||
SCM_BYTEVECTOR_LENGTH (ret));
|
||||
else
|
||||
{
|
||||
scm_t_array_handle h;
|
||||
size_t len;
|
||||
ssize_t pos, inc;
|
||||
|
||||
scm_uniform_vector_writable_elements (ret, &h, &len, &inc);
|
||||
|
||||
for (pos = 0; pos != h.dims[0].ubnd; pos += inc)
|
||||
scm_array_handle_set (&h, pos, fill);
|
||||
|
||||
/* Initialize the last element. */
|
||||
scm_array_handle_set (&h, pos, fill);
|
||||
|
||||
scm_array_handle_release (&h);
|
||||
scm_t_bytevector_set_fn set_fn =
|
||||
bytevector_set_fns[SCM_BYTEVECTOR_ELEMENT_TYPE (ret)];
|
||||
size_t step = SCM_BYTEVECTOR_TYPE_SIZE (ret);
|
||||
size_t pos = 0;
|
||||
for (pos = 0, clen *= step; pos < clen; pos += step)
|
||||
set_fn(ret, scm_from_size_t (pos), fill);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue