1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-04-30 03:40:34 +02:00

Deprecate useless C bitvector interface

C should use scm_c_bitvector_length, not scm_bitvector_length.

* doc/ref/api-data.texi (Bit Vectors): Reorganize a bit to put typed C
  interfaces in their own section.
* libguile/bitvectors.h:
* libguile/bitvectors.c (bitvector-length, bitvector-count): Make
  SCM-flavored C interface private.
  (scm_c_bitvector_count): New function.
* libguile/deprecated.c (scm_bitvector_length): Deprecate.
  (scm_bit_count): Adapt to changes.
This commit is contained in:
Andy Wingo 2020-04-21 22:35:00 +02:00
parent bfd38b8577
commit b517a91ba4
5 changed files with 37 additions and 24 deletions

View file

@ -6564,15 +6564,9 @@ Create a new bitvector with the arguments as elements.
@end deffn @end deffn
@deffn {Scheme Procedure} bitvector-length vec @deffn {Scheme Procedure} bitvector-length vec
@deffnx {C Function} scm_bitvector_length (vec)
Return the length of the bitvector @var{vec}. Return the length of the bitvector @var{vec}.
@end deffn @end deffn
@deftypefn {C Function} size_t scm_c_bitvector_length (SCM vec)
Like @code{scm_bitvector_length}, but the length is returned as a
@code{size_t}.
@end deftypefn
@deffn {Scheme Procedure} bitvector-bit-set? vec idx @deffn {Scheme Procedure} bitvector-bit-set? vec idx
@deffnx {Scheme Procedure} bitvector-bit-clear? vec idx @deffnx {Scheme Procedure} bitvector-bit-clear? vec idx
Return @code{#t} if the bit at index @var{idx} of the bitvector Return @code{#t} if the bit at index @var{idx} of the bitvector
@ -6623,7 +6617,6 @@ of the bitvector @var{vec}.
@end deffn @end deffn
@deffn {Scheme Procedure} bitvector-count bitvector @deffn {Scheme Procedure} bitvector-count bitvector
@deffnx {C Function} scm_bitvector_count (bitvector)
Return a count of how many entries in @var{bitvector} are set. Return a count of how many entries in @var{bitvector} are set.
@example @example
@ -6643,9 +6636,11 @@ For example,
@end example @end example
@end deffn @end deffn
@deftypefn {C Function} size_t scm_c_bitvector_count_bits (SCM bitvector, SCM bits) @deftypefn {C Function} size_t scm_c_bitvector_length (SCM bitvector)
Same as @code{bitvector-count-bits}, but returning a @code{size_t} for @deftypefnx {C Function} size_t scm_c_bitvector_count (SCM bitvector)
C. @deftypefnx {C Function} size_t scm_c_bitvector_count_bits (SCM bitvector, SCM bits)
Same as @code{bitvector-length}, @code{bitvector-count}, and
@code{bitvector-count-bits}, but returning a @code{size_t} result.
@end deftypefn @end deftypefn
@deffn {Scheme Procedure} bitvector-position bitvector bool start @deffn {Scheme Procedure} bitvector-position bitvector bool start

View file

@ -184,10 +184,10 @@ scm_c_bitvector_length (SCM vec)
return BITVECTOR_LENGTH (vec); return BITVECTOR_LENGTH (vec);
} }
SCM_DEFINE (scm_bitvector_length, "bitvector-length", 1, 0, 0, SCM_DEFINE_STATIC (bitvector_length, "bitvector-length", 1, 0, 0,
(SCM vec), (SCM vec),
"Return the length of the bitvector @var{vec}.") "Return the length of the bitvector @var{vec}.")
#define FUNC_NAME s_scm_bitvector_length #define FUNC_NAME s_bitvector_length
{ {
return scm_from_size_t (scm_c_bitvector_length (vec)); return scm_from_size_t (scm_c_bitvector_length (vec));
} }
@ -490,17 +490,16 @@ count_ones (uint32_t x)
return (x+(x>>16)) & 0xff; return (x+(x>>16)) & 0xff;
} }
SCM_DEFINE (scm_bitvector_count, "bitvector-count", 1, 0, 0, size_t
(SCM bitvector), scm_c_bitvector_count (SCM bitvector)
"Return the number of set bits in @var{bitvector}.") #define FUNC_NAME "bitvector-count"
#define FUNC_NAME s_scm_bitvector_count
{ {
VALIDATE_BITVECTOR (1, bitvector); VALIDATE_BITVECTOR (1, bitvector);
size_t len = BITVECTOR_LENGTH (bitvector); size_t len = BITVECTOR_LENGTH (bitvector);
if (len == 0) if (len == 0)
return SCM_INUM0; return 0;
const uint32_t *bits = BITVECTOR_BITS (bitvector); const uint32_t *bits = BITVECTOR_BITS (bitvector);
size_t count = 0; size_t count = 0;
@ -513,7 +512,16 @@ SCM_DEFINE (scm_bitvector_count, "bitvector-count", 1, 0, 0,
uint32_t last_mask = ((uint32_t)-1) >> (32*word_len - len); uint32_t last_mask = ((uint32_t)-1) >> (32*word_len - len);
count += count_ones (bits[i] & last_mask); count += count_ones (bits[i] & last_mask);
return scm_from_size_t (count); return count;
}
#undef FUNC_NAME
SCM_DEFINE_STATIC (scm_bitvector_count, "bitvector-count", 1, 0, 0,
(SCM bitvector),
"Return the number of set bits in @var{bitvector}.")
#define FUNC_NAME s_scm_bitvector_count
{
return scm_from_size_t (scm_c_bitvector_count (bitvector));
} }
#undef FUNC_NAME #undef FUNC_NAME

View file

@ -35,11 +35,9 @@
SCM_API SCM scm_bitvector_p (SCM vec); SCM_API SCM scm_bitvector_p (SCM vec);
SCM_API SCM scm_bitvector (SCM bits); SCM_API SCM scm_bitvector (SCM bits);
SCM_API SCM scm_make_bitvector (SCM len, SCM fill); SCM_API SCM scm_make_bitvector (SCM len, SCM fill);
SCM_API SCM scm_bitvector_length (SCM vec);
SCM_API SCM scm_list_to_bitvector (SCM list); SCM_API SCM scm_list_to_bitvector (SCM list);
SCM_API SCM scm_bitvector_to_list (SCM vec); SCM_API SCM scm_bitvector_to_list (SCM vec);
SCM_API SCM scm_bitvector_count (SCM v);
SCM_API SCM scm_bitvector_position (SCM v, SCM item, SCM start); 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_set_bits_x (SCM v, SCM bits);
SCM_API SCM scm_bitvector_clear_bits_x (SCM v, SCM bits); SCM_API SCM scm_bitvector_clear_bits_x (SCM v, SCM bits);
@ -47,6 +45,7 @@ SCM_API SCM scm_bitvector_clear_bits_x (SCM v, SCM bits);
SCM_API int scm_is_bitvector (SCM obj); SCM_API int scm_is_bitvector (SCM obj);
SCM_API SCM scm_c_make_bitvector (size_t len, SCM fill); SCM_API SCM scm_c_make_bitvector (size_t len, SCM fill);
SCM_API size_t scm_c_bitvector_length (SCM vec); SCM_API size_t scm_c_bitvector_length (SCM vec);
SCM_API size_t scm_c_bitvector_count (SCM v);
SCM_API int scm_c_bitvector_bit_is_set (SCM vec, size_t idx); 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 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_set_bit_x (SCM vec, size_t idx);

View file

@ -88,6 +88,16 @@ scm_find_executable (const char *name)
SCM
scm_bitvector_length (SCM vec)
{
scm_c_issue_deprecation_warning
("scm_bitvector_length is deprecated. Use scm_c_bitvector_length "
"instead.");
return scm_from_size_t (scm_c_bitvector_length (vec));
}
SCM SCM
scm_c_bitvector_ref (SCM vec, size_t idx) scm_c_bitvector_ref (SCM vec, size_t idx)
{ {
@ -251,7 +261,7 @@ SCM_DEFINE (scm_bit_count, "bit-count", 2, 0, 0,
if (scm_is_bitvector (bitvector)) if (scm_is_bitvector (bitvector))
{ {
len = scm_to_size_t (scm_bitvector_length (bitvector)); len = scm_to_size_t (scm_bitvector_length (bitvector));
count = scm_to_size_t (scm_bitvector_count (bitvector)); count = scm_c_bitvector_count (bitvector);
} }
else else
{ {
@ -309,7 +319,7 @@ SCM_DEFINE (scm_bit_count_star, "bit-count*", 3, 0, 0,
{ {
count = scm_c_bitvector_count_bits (v, kv); count = scm_c_bitvector_count_bits (v, kv);
if (count == 0) if (count == 0)
count = scm_to_size_t (scm_bitvector_count (kv)) - count; count = scm_c_bitvector_count (kv) - count;
} }
else else
{ {

View file

@ -115,6 +115,7 @@ typedef struct scm_thread scm_i_thread SCM_DEPRECATED_TYPE;
SCM_DEPRECATED char* scm_find_executable (const char *name); SCM_DEPRECATED char* scm_find_executable (const char *name);
SCM_DEPRECATED SCM scm_bitvector_length (SCM vec);
SCM_DEPRECATED SCM scm_c_bitvector_ref (SCM vec, size_t idx); SCM_DEPRECATED SCM scm_c_bitvector_ref (SCM vec, size_t idx);
SCM_DEPRECATED SCM scm_bitvector_ref (SCM vec, SCM idx); SCM_DEPRECATED SCM scm_bitvector_ref (SCM vec, SCM idx);
SCM_DEPRECATED void scm_c_bitvector_set_x (SCM vec, size_t idx, SCM val); SCM_DEPRECATED void scm_c_bitvector_set_x (SCM vec, size_t idx, SCM val);