mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-09 21:40:33 +02:00
Add lenp parameter back to scm_bitvector_(writable_)elements
This commit is contained in:
parent
bf5b9a86bc
commit
dbf08c3a96
4 changed files with 20 additions and 14 deletions
|
@ -34,11 +34,11 @@ Use SCM_VECTOR_REF, SCM_VECTOR_SET and SCM_VECTOR_LENGTH instead.
|
||||||
|
|
||||||
** The vector argument to scm_vector_elements / scm_vector_writable_elements must be a true vector. Handle/inc arguments have been removed.
|
** The vector argument to scm_vector_elements / scm_vector_writable_elements must be a true vector. Handle/inc arguments have been removed.
|
||||||
|
|
||||||
Use scm_array_get_handle and scm_array_handle_elements / scm_array_handle_writable_elements on general arrays.
|
Use scm_array_get_handle and scm_array_handle_elements / scm_array_handle_writable_elements on general #t arrays.
|
||||||
|
|
||||||
** The vector argument to scm_bitvector_elements / scm_bitvector_writable_elements must be a true bitvector. Handle/inc arguments have been removed.
|
** The vector argument to scm_bitvector_elements / scm_bitvector_writable_elements must be a true bitvector. Handle/inc arguments have been removed.
|
||||||
|
|
||||||
Use scm_array_get_handle and scm_array_handle_bit_elements / scm_array_handle_bit_writable_elements on bit arrays.
|
Use scm_array_get_handle and scm_array_handle_bit_elements / scm_array_handle_bit_writable_elements on general bit arrays.
|
||||||
Use scm_array1_bit_elements (NEW) / scm_array1_bit_writable_elements (NEW) on rank-1 bit arrays.
|
Use scm_array1_bit_elements (NEW) / scm_array1_bit_writable_elements (NEW) on rank-1 bit arrays.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -6663,13 +6663,13 @@ For example,
|
||||||
@end example
|
@end example
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
@deftypefn {C Function} {const scm_t_uint32 *} scm_bitvector_elements (SCM vec)
|
@deftypefn {C Function} {const scm_t_uint32 *} scm_bitvector_elements (SCM vec, size_t *lenp)
|
||||||
Like @code{scm_vector_elements} (@pxref{Vector Accessing from C}), but
|
Like @code{scm_vector_elements} (@pxref{Vector Accessing from C}), but
|
||||||
for bitvectors. See @code{scm_array_handle_bit_elements} for how to use the returned
|
for bitvectors. See @code{scm_array_handle_bit_elements} for how to use the returned
|
||||||
pointer.
|
pointer.
|
||||||
@end deftypefn
|
@end deftypefn
|
||||||
|
|
||||||
@deftypefn {C Function} {scm_t_uint32 *} scm_bitvector_writable_elements (SCM vec)
|
@deftypefn {C Function} {scm_t_uint32 *} scm_bitvector_writable_elements (SCM vec, size_t *lenp)
|
||||||
Like @code{scm_bitvector_elements}, but the pointer is good for reading
|
Like @code{scm_bitvector_elements}, but the pointer is good for reading
|
||||||
and writing.
|
and writing.
|
||||||
@end deftypefn
|
@end deftypefn
|
||||||
|
|
|
@ -218,16 +218,20 @@ scm_array_handle_bit_elements_offset (scm_t_array_handle *h)
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
const uint32_t *
|
const uint32_t *
|
||||||
scm_bitvector_elements (SCM vec)
|
scm_bitvector_elements (SCM vec, size_t *lenp)
|
||||||
{
|
{
|
||||||
SCM_VALIDATE_BITVECTOR (1, vec);
|
SCM_VALIDATE_BITVECTOR (1, vec);
|
||||||
|
if (lenp)
|
||||||
|
*lenp = BITVECTOR_LENGTH (vec);
|
||||||
return BITVECTOR_BITS (vec);
|
return BITVECTOR_BITS (vec);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t *
|
uint32_t *
|
||||||
scm_bitvector_writable_elements (SCM vec)
|
scm_bitvector_writable_elements (SCM vec, size_t *lenp)
|
||||||
{
|
{
|
||||||
SCM_VALIDATE_MUTABLE_BITVECTOR (1, vec);
|
SCM_VALIDATE_MUTABLE_BITVECTOR (1, vec);
|
||||||
|
if (lenp)
|
||||||
|
*lenp = BITVECTOR_LENGTH (vec);
|
||||||
return BITVECTOR_BITS (vec);
|
return BITVECTOR_BITS (vec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -250,8 +254,9 @@ bitset_ (uint32_t *bits, size_t idx, bool b)
|
||||||
SCM
|
SCM
|
||||||
scm_c_bitvector_ref (SCM vec, size_t idx)
|
scm_c_bitvector_ref (SCM vec, size_t idx)
|
||||||
{
|
{
|
||||||
const uint32_t *bits = scm_bitvector_elements (vec);
|
size_t len;
|
||||||
if (idx >= BITVECTOR_LENGTH (vec))
|
const uint32_t *bits = scm_bitvector_elements (vec, &len);
|
||||||
|
if (idx >= len)
|
||||||
scm_out_of_range (NULL, scm_from_size_t (idx));
|
scm_out_of_range (NULL, scm_from_size_t (idx));
|
||||||
return scm_from_bool (bitref_(bits, idx));
|
return scm_from_bool (bitref_(bits, idx));
|
||||||
}
|
}
|
||||||
|
@ -269,8 +274,9 @@ SCM_DEFINE (scm_bitvector_ref, "bitvector-ref", 2, 0, 0,
|
||||||
void
|
void
|
||||||
scm_c_bitvector_set_x (SCM vec, size_t idx, SCM val)
|
scm_c_bitvector_set_x (SCM vec, size_t idx, SCM val)
|
||||||
{
|
{
|
||||||
uint32_t *bits = scm_bitvector_writable_elements (vec);
|
size_t len;
|
||||||
if (idx >= BITVECTOR_LENGTH (vec))
|
uint32_t *bits = scm_bitvector_writable_elements (vec, &len);
|
||||||
|
if (idx >= len)
|
||||||
scm_out_of_range (NULL, scm_from_size_t (idx));
|
scm_out_of_range (NULL, scm_from_size_t (idx));
|
||||||
|
|
||||||
bitset_(bits, idx, scm_is_true (val));
|
bitset_(bits, idx, scm_is_true (val));
|
||||||
|
@ -335,7 +341,7 @@ SCM_DEFINE (scm_list_to_bitvector, "list->bitvector", 1, 0, 0,
|
||||||
size_t bit_len = scm_to_size_t (scm_length (list));
|
size_t bit_len = scm_to_size_t (scm_length (list));
|
||||||
SCM vec = scm_c_make_bitvector (bit_len, SCM_UNDEFINED);
|
SCM vec = scm_c_make_bitvector (bit_len, SCM_UNDEFINED);
|
||||||
size_t word_len = (bit_len+31)/32;
|
size_t word_len = (bit_len+31)/32;
|
||||||
uint32_t *bits = scm_bitvector_writable_elements (vec);
|
uint32_t *bits = scm_bitvector_writable_elements (vec, NULL);
|
||||||
size_t i, j;
|
size_t i, j;
|
||||||
|
|
||||||
for (i = 0; i < word_len && scm_is_pair (list); i++, bit_len -= 32)
|
for (i = 0; i < word_len && scm_is_pair (list); i++, bit_len -= 32)
|
||||||
|
@ -745,7 +751,7 @@ scm_istr2bve (SCM str)
|
||||||
const char *c_str;
|
const char *c_str;
|
||||||
uint32_t *data;
|
uint32_t *data;
|
||||||
|
|
||||||
data = scm_bitvector_writable_elements (vec);
|
data = scm_bitvector_writable_elements (vec, NULL);
|
||||||
c_str = scm_i_string_chars (str);
|
c_str = scm_i_string_chars (str);
|
||||||
|
|
||||||
for (k = 0; k < (len + 31) / 32; k++)
|
for (k = 0; k < (len + 31) / 32; k++)
|
||||||
|
|
|
@ -57,8 +57,8 @@ SCM_API void scm_c_bitvector_set_x (SCM vec, size_t idx, SCM val);
|
||||||
SCM_API const uint32_t *scm_array_handle_bit_elements (scm_t_array_handle *h);
|
SCM_API const uint32_t *scm_array_handle_bit_elements (scm_t_array_handle *h);
|
||||||
SCM_API uint32_t *scm_array_handle_bit_writable_elements (scm_t_array_handle *h);
|
SCM_API uint32_t *scm_array_handle_bit_writable_elements (scm_t_array_handle *h);
|
||||||
SCM_API size_t scm_array_handle_bit_elements_offset (scm_t_array_handle *h);
|
SCM_API size_t scm_array_handle_bit_elements_offset (scm_t_array_handle *h);
|
||||||
SCM_API const uint32_t *scm_bitvector_elements (SCM vec);
|
SCM_API const uint32_t *scm_bitvector_elements (SCM vec, size_t *lenp);
|
||||||
SCM_API uint32_t *scm_bitvector_writable_elements (SCM vec);
|
SCM_API uint32_t *scm_bitvector_writable_elements (SCM vec, size_t *lenp);
|
||||||
|
|
||||||
SCM_INTERNAL uint32_t *scm_i_bitvector_bits (SCM vec);
|
SCM_INTERNAL uint32_t *scm_i_bitvector_bits (SCM vec);
|
||||||
SCM_INTERNAL int scm_i_is_mutable_bitvector (SCM vec);
|
SCM_INTERNAL int scm_i_is_mutable_bitvector (SCM vec);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue