mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-18 17:50:29 +02:00
bitvector-bit-set? / bitvector-bit-clear? replace bitvector-ref
This is an opportunity to make a new interface that can be more efficient in 3.0 (because no generic array support), easier to read (no need for 'not'), and more consistent with other bitvector interfaces. * NEWS: Add entry. * doc/ref/api-data.texi (Bit Vectors): Update. * libguile/array-handle.h (bitvector_ref, scm_array_get_handle): Adapt to bitvector changes. * libguile/bitvectors.h: * libguile/bitvectors.c (scm_c_bitvector_bit_is_set) (scm_c_bitvector_bit_is_clear): New functions. * libguile/deprecated.h: * libguile/deprecated.c (scm_bitvector_ref): Deprecate. * module/ice-9/sandbox.scm (bitvector-bindings): Replace bitvector-ref with bitvector-bit-set? / bitvector-bit-clear?. * module/system/vm/disassembler.scm (instruction-has-fallthrough): Use bitvector-bit-clear?. * test-suite/tests/bitvectors.test: Update.
This commit is contained in:
parent
ff9979b6bc
commit
d804177be4
10 changed files with 106 additions and 50 deletions
|
@ -88,6 +88,41 @@ scm_find_executable (const char *name)
|
|||
|
||||
|
||||
|
||||
SCM
|
||||
scm_c_bitvector_ref (SCM vec, size_t idx)
|
||||
{
|
||||
scm_c_issue_deprecation_warning
|
||||
("bitvector-ref is deprecated. Use bitvector-bit-set? instead.");
|
||||
|
||||
if (scm_is_bitvector (vec))
|
||||
return scm_from_bool (scm_c_bitvector_bit_is_set (vec, idx));
|
||||
|
||||
SCM res;
|
||||
scm_t_array_handle handle;
|
||||
size_t len, off;
|
||||
ssize_t inc;
|
||||
|
||||
const uint32_t *bits =
|
||||
scm_bitvector_elements (vec, &handle, &off, &len, &inc);
|
||||
|
||||
if (idx >= len)
|
||||
scm_out_of_range (NULL, scm_from_size_t (idx));
|
||||
idx = idx*inc + off;
|
||||
res = scm_from_bool (bits[idx/32] & (1L << (idx%32)));
|
||||
scm_array_handle_release (&handle);
|
||||
return res;
|
||||
}
|
||||
|
||||
SCM_DEFINE (scm_bitvector_ref, "bitvector-ref", 2, 0, 0,
|
||||
(SCM vec, SCM idx),
|
||||
"Return the element at index @var{idx} of the bitvector\n"
|
||||
"@var{vec}.")
|
||||
#define FUNC_NAME s_scm_bitvector_ref
|
||||
{
|
||||
return scm_c_bitvector_ref (vec, scm_to_size_t (idx));
|
||||
}
|
||||
#undef FUNC_NAME
|
||||
|
||||
SCM_DEFINE (scm_bit_count, "bit-count", 2, 0, 0,
|
||||
(SCM b, SCM bitvector),
|
||||
"Return the number of occurrences of the boolean @var{b} in\n"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue