SphinxBase
5prealpha
bitvec.c
1
/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
/* ====================================================================
3
* Copyright (c) 1999-2004 Carnegie Mellon University. All rights
4
* reserved.
5
*
6
* Redistribution and use in source and binary forms, with or without
7
* modification, are permitted provided that the following conditions
8
* are met:
9
*
10
* 1. Redistributions of source code must retain the above copyright
11
* notice, this list of conditions and the following disclaimer.
12
*
13
* 2. Redistributions in binary form must reproduce the above copyright
14
* notice, this list of conditions and the following disclaimer in
15
* the documentation and/or other materials provided with the
16
* distribution.
17
*
18
* This work was supported in part by funding from the Defense Advanced
19
* Research Projects Agency and the National Science Foundation of the
20
* United States of America, and the CMU Sphinx Speech Consortium.
21
*
22
* THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND
23
* ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
24
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
25
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
26
* NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33
*
34
* ====================================================================
35
*
36
*/
37
/*
38
* bitvec.c -- Bit vector type.
39
*
40
* **********************************************
41
* CMU ARPA Speech Project
42
*
43
* Copyright (c) 1999 Carnegie Mellon University.
44
* ALL RIGHTS RESERVED.
45
* **********************************************
46
*
47
* HISTORY
48
* $Log: bitvec.c,v $
49
* Revision 1.4 2005/06/22 02:58:22 arthchan2003
50
* Added keyword
51
*
52
* Revision 1.3 2005/03/30 01:22:48 archan
53
* Fixed mistakes in last updates. Add
54
*
55
*
56
* 05-Mar-1999 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon
57
* Started.
58
*/
59
60
61
#include "
sphinxbase/bitvec.h
"
62
63
bitvec_t *
64
bitvec_realloc
(bitvec_t *vec,
65
size_t
old_len,
66
size_t
new_len)
67
{
68
bitvec_t *new_vec;
69
size_t
old_size =
bitvec_size
(old_len);
70
size_t
new_size =
bitvec_size
(new_len);
71
72
new_vec =
ckd_realloc
(vec, new_size *
sizeof
(bitvec_t));
73
if
(new_size > old_size)
74
memset(new_vec + old_size, 0, (new_size - old_size) *
sizeof
(bitvec_t));
75
76
return
new_vec;
77
}
78
79
size_t
80
bitvec_count_set
(bitvec_t *vec,
size_t
len)
81
{
82
size_t
words, bits, w, b, n;
83
bitvec_t *v;
84
85
words = len / BITVEC_BITS;
86
bits = len % BITVEC_BITS;
87
v = vec;
88
n = 0;
89
for
(w = 0; w < words; ++w, ++v) {
90
if
(*v == 0)
91
continue
;
92
for
(b = 0; b < BITVEC_BITS; ++b)
93
if
(*v & (1<<b))
94
++n;
95
}
96
for
(b = 0; b < bits; ++b)
97
if
(*v & (1<<b))
98
++n;
99
100
return
n;
101
}
bitvec_realloc
SPHINXBASE_EXPORT bitvec_t * bitvec_realloc(bitvec_t *vec, size_t old_len, size_t new_len)
Resize a bit vector, clear the remaining bits.
Definition:
bitvec.c:64
bitvec_count_set
SPHINXBASE_EXPORT size_t bitvec_count_set(bitvec_t *vec, size_t len)
Return the number of bits set in the given bitvector.
Definition:
bitvec.c:80
bitvec_size
#define bitvec_size(n)
Number of bitvec_t in a bit vector.
Definition:
bitvec.h:70
ckd_realloc
#define ckd_realloc(ptr, sz)
Macro for ckd_realloc
Definition:
ckd_alloc.h:258
bitvec.h
An implementation of bit vectors.
src
libsphinxbase
util
bitvec.c
Generated by
1.8.17