Prefer C-like interfaces for scm_c_bitvector_{set,clear}_bits_x
* libguile/bitvectors.h: * libguile/bitvectors.c (scm_c_bitvector_set_bits_x) (scm_c_bitvector_clear_bits_x): Expose only C-like interfaces. No need to have a SCM_UNDEFINED return. * libguile/deprecated.c (scm_bit_set_star_x): Adapt. * doc/ref/api-data.texi (Bit Vectors): Update.
This commit is contained in:
parent
b517a91ba4
commit
8861af39ae
4 changed files with 68 additions and 63 deletions
|
|
@ -590,19 +590,9 @@ SCM_DEFINE (scm_bitvector_position, "bitvector-position", 2, 1, 0,
|
|||
}
|
||||
#undef FUNC_NAME
|
||||
|
||||
SCM_DEFINE (scm_bitvector_set_bits_x, "bitvector-set-bits!", 2, 0, 0,
|
||||
(SCM v, SCM bits),
|
||||
"Update the bitvector @var{v} in place by performing a logical\n"
|
||||
"OR of its bits with those of @var{bits}.\n"
|
||||
"For example:\n"
|
||||
"\n"
|
||||
"@example\n"
|
||||
"(define bv (bitvector-copy #*11000010))\n"
|
||||
"(bitvector-set-bits! bv #*10010001)\n"
|
||||
"bv\n"
|
||||
"@result{} #*11010011\n"
|
||||
"@end example")
|
||||
#define FUNC_NAME s_scm_bitvector_set_bits_x
|
||||
void
|
||||
scm_c_bitvector_set_bits_x (SCM v, SCM bits)
|
||||
#define FUNC_NAME "bitvector-set-bits!"
|
||||
{
|
||||
VALIDATE_MUTABLE_BITVECTOR (1, v);
|
||||
VALIDATE_BITVECTOR (2, bits);
|
||||
|
|
@ -625,24 +615,12 @@ SCM_DEFINE (scm_bitvector_set_bits_x, "bitvector-set-bits!", 2, 0, 0,
|
|||
v_bits[i] |= kv_bits[i];
|
||||
v_bits[i] |= kv_bits[i] & last_mask;
|
||||
}
|
||||
|
||||
return SCM_UNSPECIFIED;
|
||||
}
|
||||
#undef FUNC_NAME
|
||||
|
||||
SCM_DEFINE (scm_bitvector_clear_bits_x, "bitvector-clear-bits!", 2, 0, 0,
|
||||
(SCM v, SCM bits),
|
||||
"Update the bitvector @var{v} in place by performing a logical\n"
|
||||
"AND of its bits with the complement of those of @var{bits}.\n"
|
||||
"For example:\n"
|
||||
"\n"
|
||||
"@example\n"
|
||||
"(define bv (bitvector-copy #*11000010))\n"
|
||||
"(bitvector-clear-bits! bv #*10010001)\n"
|
||||
"bv\n"
|
||||
"@result{} #*01000010\n"
|
||||
"@end example")
|
||||
#define FUNC_NAME s_scm_bitvector_clear_bits_x
|
||||
void
|
||||
scm_c_bitvector_clear_bits_x (SCM v, SCM bits)
|
||||
#define FUNC_NAME "bitvector-clear-bits!"
|
||||
{
|
||||
VALIDATE_MUTABLE_BITVECTOR (1, v);
|
||||
VALIDATE_BITVECTOR (2, bits);
|
||||
|
|
@ -666,7 +644,43 @@ SCM_DEFINE (scm_bitvector_clear_bits_x, "bitvector-clear-bits!", 2, 0, 0,
|
|||
v_bits[i] &= ~kv_bits[i];
|
||||
v_bits[i] &= ~(kv_bits[i] & last_mask);
|
||||
}
|
||||
}
|
||||
#undef FUNC_NAME
|
||||
|
||||
SCM_DEFINE_STATIC (scm_bitvector_set_bits_x, "bitvector-set-bits!", 2, 0, 0,
|
||||
(SCM v, SCM bits),
|
||||
"Update the bitvector @var{v} in place by performing a\n"
|
||||
"logical OR of its bits with those of @var{bits}.\n"
|
||||
"For example:\n"
|
||||
"\n"
|
||||
"@example\n"
|
||||
"(define bv (bitvector-copy #*11000010))\n"
|
||||
"(bitvector-set-bits! bv #*10010001)\n"
|
||||
"bv\n"
|
||||
"@result{} #*11010011\n"
|
||||
"@end example")
|
||||
#define FUNC_NAME s_scm_bitvector_set_bits_x
|
||||
{
|
||||
scm_c_bitvector_set_bits_x (v, bits);
|
||||
return SCM_UNSPECIFIED;
|
||||
}
|
||||
#undef FUNC_NAME
|
||||
|
||||
SCM_DEFINE_STATIC (scm_bitvector_clear_bits_x, "bitvector-clear-bits!", 2, 0, 0,
|
||||
(SCM v, SCM bits),
|
||||
"Update the bitvector @var{v} in place by performing a\n"
|
||||
"logical AND of its bits with the complement of those of\n"
|
||||
"@var{bits}. For example:\n"
|
||||
"\n"
|
||||
"@example\n"
|
||||
"(define bv (bitvector-copy #*11000010))\n"
|
||||
"(bitvector-clear-bits! bv #*10010001)\n"
|
||||
"bv\n"
|
||||
"@result{} #*01000010\n"
|
||||
"@end example")
|
||||
#define FUNC_NAME s_scm_bitvector_clear_bits_x
|
||||
{
|
||||
scm_c_bitvector_clear_bits_x (v, bits);
|
||||
return SCM_UNSPECIFIED;
|
||||
}
|
||||
#undef FUNC_NAME
|
||||
|
|
|
|||
|
|
@ -39,8 +39,6 @@ SCM_API SCM scm_list_to_bitvector (SCM list);
|
|||
SCM_API SCM scm_bitvector_to_list (SCM vec);
|
||||
|
||||
SCM_API SCM scm_bitvector_position (SCM v, SCM item, SCM start);
|
||||
SCM_API SCM scm_bitvector_set_bits_x (SCM v, SCM bits);
|
||||
SCM_API SCM scm_bitvector_clear_bits_x (SCM v, SCM bits);
|
||||
|
||||
SCM_API int scm_is_bitvector (SCM obj);
|
||||
SCM_API SCM scm_c_make_bitvector (size_t len, SCM fill);
|
||||
|
|
@ -50,6 +48,8 @@ SCM_API int scm_c_bitvector_bit_is_set (SCM vec, size_t idx);
|
|||
SCM_API int scm_c_bitvector_bit_is_clear (SCM vec, size_t idx);
|
||||
SCM_API void scm_c_bitvector_set_bit_x (SCM vec, size_t idx);
|
||||
SCM_API void scm_c_bitvector_clear_bit_x (SCM vec, size_t idx);
|
||||
SCM_API void scm_c_bitvector_set_bits_x (SCM v, SCM bits);
|
||||
SCM_API void scm_c_bitvector_clear_bits_x (SCM v, SCM bits);
|
||||
SCM_API void scm_c_bitvector_set_all_bits_x (SCM vec);
|
||||
SCM_API void scm_c_bitvector_clear_all_bits_x (SCM vec);
|
||||
SCM_API void scm_c_bitvector_flip_all_bits_x (SCM vec);
|
||||
|
|
|
|||
|
|
@ -447,9 +447,14 @@ SCM_DEFINE (scm_bit_set_star_x, "bit-set*!", 3, 0, 0,
|
|||
|
||||
int bit = scm_to_bool (obj);
|
||||
if (scm_is_bitvector (v) && scm_is_bitvector (kv))
|
||||
return bit
|
||||
? scm_bitvector_set_bits_x (v, kv)
|
||||
: scm_bitvector_clear_bits_x (v, kv);
|
||||
{
|
||||
if (bit)
|
||||
scm_c_bitvector_set_bits_x (v, kv);
|
||||
else
|
||||
scm_c_bitvector_clear_bits_x (v, kv);
|
||||
|
||||
return SCM_UNSPECIFIED;
|
||||
}
|
||||
|
||||
scm_t_array_handle v_handle;
|
||||
size_t v_off, v_len;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue