aboutsummaryrefslogtreecommitdiffstats
path: root/src/data.c
diff options
context:
space:
mode:
authorPaul Eggert2013-11-18 10:56:42 -0800
committerPaul Eggert2013-11-18 10:56:42 -0800
commitec2c4ee6d2cb9c5505f120229269941f064b23fa (patch)
tree9c0e0ba58f15f602fce7d349cfa89fc665728161 /src/data.c
parent87d86601022feb7a330fc6344cc85ec65563c1b6 (diff)
downloademacs-ec2c4ee6d2cb9c5505f120229269941f064b23fa.tar.gz
emacs-ec2c4ee6d2cb9c5505f120229269941f064b23fa.zip
Improve API of recently-added bool vector functions.
The old API had (bool-vector-count-matches A B) and (bool-vector-count-matches-at A B I), which gave the misleading impression that the two functions were variants, one with a location I. The new API has (bool-vector-count-population A) and (bool-vector-count-consecutive A B I) to make the distinction clearer. The first function no longer has a B argument, since the caller can easily determine the number of nils if the length and number of ts is known. * src/data.c (Fbool_vector_count_population): Rename from bool_vector_count_matches, and accept just 1 argument. (Fbool_vector_count_consecutive): Rename from Fbool_vector_count_matches_at. * test/automated/data-tests.el: Adjust to API changes. Fixes: debbugs:15912
Diffstat (limited to 'src/data.c')
-rw-r--r--src/data.c27
1 files changed, 12 insertions, 15 deletions
diff --git a/src/data.c b/src/data.c
index b8b0f248dfa..2c789f37431 100644
--- a/src/data.c
+++ b/src/data.c
@@ -3282,11 +3282,12 @@ Return the destination vector. */)
3282 return b; 3282 return b;
3283} 3283}
3284 3284
3285DEFUN ("bool-vector-count-matches", Fbool_vector_count_matches, 3285DEFUN ("bool-vector-count-population", Fbool_vector_count_population,
3286 Sbool_vector_count_matches, 2, 2, 0, 3286 Sbool_vector_count_population, 1, 1, 0,
3287 doc: /* Count how many elements in A equal B. 3287 doc: /* Count how many elements in A are t.
3288A must be a bool vector. B is a generalized bool. */) 3288A is a bool vector. To count A's nil elements, subtract the return
3289 (Lisp_Object a, Lisp_Object b) 3289value from A's length. */)
3290 (Lisp_Object a)
3290{ 3291{
3291 EMACS_INT count; 3292 EMACS_INT count;
3292 EMACS_INT nr_bits; 3293 EMACS_INT nr_bits;
@@ -3303,17 +3304,13 @@ A must be a bool vector. B is a generalized bool. */)
3303 for (i = 0; i < nwords; i++) 3304 for (i = 0; i < nwords; i++)
3304 count += count_one_bits_word (adata[i]); 3305 count += count_one_bits_word (adata[i]);
3305 3306
3306 if (NILP (b))
3307 count = nr_bits - count;
3308 return make_number (count); 3307 return make_number (count);
3309} 3308}
3310 3309
3311DEFUN ("bool-vector-count-matches-at", 3310DEFUN ("bool-vector-count-consecutive", Fbool_vector_count_consecutive,
3312 Fbool_vector_count_matches_at, 3311 Sbool_vector_count_consecutive, 3, 3, 0,
3313 Sbool_vector_count_matches_at, 3, 3, 0, 3312 doc: /* Count how many consecutive elements in A equal B starting at I.
3314 doc: /* Count how many consecutive elements in A equal B at i. 3313A is a bool vector, B is t or nil, and I is an index into A. */)
3315A must be a bool vector. B is a generalized boolean. i is an
3316index into the vector. */)
3317 (Lisp_Object a, Lisp_Object b, Lisp_Object i) 3314 (Lisp_Object a, Lisp_Object b, Lisp_Object i)
3318{ 3315{
3319 EMACS_INT count; 3316 EMACS_INT count;
@@ -3660,8 +3657,8 @@ syms_of_data (void)
3660 defsubr (&Sbool_vector_set_difference); 3657 defsubr (&Sbool_vector_set_difference);
3661 defsubr (&Sbool_vector_not); 3658 defsubr (&Sbool_vector_not);
3662 defsubr (&Sbool_vector_subsetp); 3659 defsubr (&Sbool_vector_subsetp);
3663 defsubr (&Sbool_vector_count_matches); 3660 defsubr (&Sbool_vector_count_consecutive);
3664 defsubr (&Sbool_vector_count_matches_at); 3661 defsubr (&Sbool_vector_count_population);
3665 3662
3666 set_symbol_function (Qwholenump, XSYMBOL (Qnatnump)->function); 3663 set_symbol_function (Qwholenump, XSYMBOL (Qnatnump)->function);
3667 3664