mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-19 18:20:22 +02:00
Simplify interfaces to scm_TYPEvector_(writable_)elements
Nothing is lost in these since the functions already required true typed vectors, the extra arguments didn't serve any purpose. Changing my mind from (vec) to (vec, lenp), though. Will fix vector/bitvector next. * libguile/srfi-4.h: scm_TYPEvector_(writable_)elements take (vec, lenp). * libguile/srfi-4.c: Fix implementation. * libguile/bitvectors.c: Fix use. * test-suite/standalone/test-srfi-4.c: Fix old test and write variant with full array handle interface. * doc/ref/srfi-modules.texi: Fix doc for srfi-4 scm_TYPEvector_(writable_)elements.
This commit is contained in:
parent
e3795a39fa
commit
04c80519bf
6 changed files with 106 additions and 162 deletions
|
@ -607,19 +607,12 @@ SCM_DEFINE (scm_bit_set_star_x, "bit-set*!", 3, 0, 0,
|
|||
bitset_ (v_bits, v_off+i*v_inc, bit);
|
||||
}
|
||||
}
|
||||
/* FIXME This requires a true u32vector so handle, inc, etc. are superfluous */
|
||||
else if (scm_is_true (scm_u32vector_p (kv)))
|
||||
{
|
||||
scm_t_array_handle kv_handle;
|
||||
size_t i, kv_len;
|
||||
ssize_t kv_inc;
|
||||
const uint32_t *kv_elts;
|
||||
|
||||
kv_elts = scm_u32vector_elements (kv, &kv_handle, &kv_len, &kv_inc);
|
||||
for (i = 0; i < kv_len; i++, kv_elts += kv_inc)
|
||||
bitset_ (v_bits, v_off+(*kv_elts)*v_inc, bit);
|
||||
|
||||
scm_array_handle_release (&kv_handle);
|
||||
size_t kv_len;
|
||||
const uint32_t *kv_elts = scm_u32vector_elements (kv, &kv_len);
|
||||
for (size_t i = 0; i < kv_len; i++)
|
||||
bitset_ (v_bits, v_off+(kv_elts[i])*v_inc, bit);
|
||||
}
|
||||
else
|
||||
scm_wrong_type_arg_msg (NULL, 0, kv, "bitvector or u32vector");
|
||||
|
@ -693,20 +686,14 @@ SCM_DEFINE (scm_bit_count_star, "bit-count*", 3, 0, 0,
|
|||
/* FIXME This requires a true u32vector so handle, inc, etc. are superfluous */
|
||||
else if (scm_is_true (scm_u32vector_p (kv)))
|
||||
{
|
||||
scm_t_array_handle kv_handle;
|
||||
size_t i, kv_len;
|
||||
ssize_t kv_inc;
|
||||
const uint32_t *kv_elts;
|
||||
|
||||
kv_elts = scm_u32vector_elements (kv, &kv_handle, &kv_len, &kv_inc);
|
||||
for (i = 0; i < kv_len; i++, kv_elts += kv_inc)
|
||||
size_t kv_len;
|
||||
const uint32_t *kv_elts = scm_u32vector_elements (kv, &kv_len);
|
||||
for (size_t i = 0; i < kv_len; i++)
|
||||
{
|
||||
bool elt = bitref_ (v_bits, v_off+(*kv_elts)*v_inc);
|
||||
bool elt = bitref_ (v_bits, v_off+(kv_elts[i])*v_inc);
|
||||
if ((bit && elt) || (!bit && !elt))
|
||||
count++;
|
||||
}
|
||||
|
||||
scm_array_handle_release (&kv_handle);
|
||||
}
|
||||
else
|
||||
scm_wrong_type_arg_msg (NULL, 0, kv, "bitvector or u32vector");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue