summaryrefslogtreecommitdiff
path: root/libguile/deprecated.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2020-04-12 22:39:55 +0200
committerAndy Wingo <wingo@pobox.com>2020-04-12 22:39:55 +0200
commit06709d77b9f519c712e13e086c7213e5a77fcbc4 (patch)
treeb3f94fd3454cc22208dc8f8bb570b795798d917e /libguile/deprecated.c
parentcae74359decc1a9d28c7892c7344512178eeac2e (diff)
downloadguile-06709d77b9f519c712e13e086c7213e5a77fcbc4.tar.gz
Replace bit-position with bitvector-position
The old name was wonky and had bad argument order. * NEWS: Add entry. * doc/ref/api-data.texi (Bit Vectors): Update. * libguile/bitvectors.h: * libguile/bitvectors.c (scm_bitvector_position): New function. * libguile/deprecated.h: * libguile/deprecated.c (scm_bit_position): Deprecate. * module/ice-9/sandbox.scm (bitvector-bindings): Replace bit-position with bitvector-position. * module/language/cps/intset.scm (bitvector->intset): Use bitvector-position. * module/system/vm/frame.scm (available-bindings): Use bitvector-position. * test-suite/tests/bitvectors.test ("bitvector-position"): Add test.
Diffstat (limited to 'libguile/deprecated.c')
-rw-r--r--libguile/deprecated.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/libguile/deprecated.c b/libguile/deprecated.c
index e39d11e9d..2b1a338a5 100644
--- a/libguile/deprecated.c
+++ b/libguile/deprecated.c
@@ -124,6 +124,48 @@ SCM_DEFINE (scm_bit_count, "bit-count", 2, 0, 0,
}
#undef FUNC_NAME
+SCM_DEFINE (scm_bit_position, "bit-position", 3, 0, 0,
+ (SCM item, SCM v, SCM k),
+ "Return the index of the first occurrence of @var{item} in bit\n"
+ "vector @var{v}, starting from @var{k}. If there is no\n"
+ "@var{item} entry between @var{k} and the end of\n"
+ "@var{v}, then return @code{#f}. For example,\n"
+ "\n"
+ "@example\n"
+ "(bit-position #t #*000101 0) @result{} 3\n"
+ "(bit-position #f #*0001111 3) @result{} #f\n"
+ "@end example")
+#define FUNC_NAME s_scm_bit_position
+{
+ scm_c_issue_deprecation_warning
+ ("bit-position is deprecated. Use bitvector-position, or "
+ "array-ref in a loop if you need generic arrays instead.");
+
+ if (scm_is_true (scm_bitvector_p (v)))
+ return scm_bitvector_position (v, item, k);
+
+ scm_t_array_handle handle;
+ size_t off, len;
+ ssize_t inc;
+ scm_bitvector_elements (v, &handle, &off, &len, &inc);
+ int bit = scm_to_bool (item);
+ size_t first_bit = scm_to_unsigned_integer (k, 0, len);
+ SCM res = SCM_BOOL_F;
+ for (size_t i = first_bit; i < len; i++)
+ {
+ SCM elt = scm_array_handle_ref (&handle, i*inc);
+ if ((bit && scm_is_true (elt)) || (!bit && scm_is_false (elt)))
+ {
+ res = scm_from_size_t (i);
+ break;
+ }
+ }
+ scm_array_handle_release (&handle);
+
+ return res;
+}
+#undef FUNC_NAME
+
SCM
scm_istr2bve (SCM str)
{