SphinxBase
5prealpha
bitvec.h
Go to the documentation of this file.
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
#ifndef _LIBUTIL_BITVEC_H_
39
#define _LIBUTIL_BITVEC_H_
40
41
#include <string.h>
42
43
/* Win32/WinCE DLL gunk */
44
#include <sphinxbase/sphinxbase_export.h>
45
46
#include <
sphinxbase/prim_type.h
>
47
#include <
sphinxbase/ckd_alloc.h
>
48
56
#ifdef __cplusplus
57
extern
"C"
{
58
#endif
59
#if 0
60
/* Fool Emacs. */
61
}
62
#endif
63
64
#define BITVEC_BITS 32
65
typedef
uint32 bitvec_t;
66
70
#define bitvec_size(n) (((n)+BITVEC_BITS-1)/BITVEC_BITS)
71
75
#define bitvec_alloc(n) ckd_calloc(bitvec_size(n), sizeof(bitvec_t))
76
80
SPHINXBASE_EXPORT
81
bitvec_t *
bitvec_realloc
(bitvec_t *vec,
/* In: Bit vector to search */
82
size_t
old_len,
/* In: Old length */
83
size_t
new_len);
/* In: New lenght of above bit vector */
87
#define bitvec_free(v) ckd_free(v)
88
95
#define bitvec_set(v,b) (v[(b)/BITVEC_BITS] |= (1UL << ((b) & (BITVEC_BITS-1))))
96
103
#define bitvec_set_all(v,n) memset(v, (bitvec_t)-1, \
104
(((n)+BITVEC_BITS-1)/BITVEC_BITS) * \
105
sizeof(bitvec_t))
106
112
#define bitvec_clear(v,b) (v[(b)/BITVEC_BITS] &= ~(1UL << ((b) & (BITVEC_BITS-1))))
113
120
#define bitvec_clear_all(v,n) memset(v, 0, (((n)+BITVEC_BITS-1)/BITVEC_BITS) * \
121
sizeof(bitvec_t))
122
129
#define bitvec_is_set(v,b) (v[(b)/BITVEC_BITS] & (1UL << ((b) & (BITVEC_BITS-1))))
130
137
#define bitvec_is_clear(v,b) (! (bitvec_is_set(v,b)))
138
139
147
SPHINXBASE_EXPORT
148
size_t
bitvec_count_set
(bitvec_t *vec,
/* In: Bit vector to search */
149
size_t
len);
/* In: Lenght of above bit vector */
150
151
#ifdef __cplusplus
152
}
153
#endif
154
155
#endif
prim_type.h
Basic type definitions used in Sphinx.
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
ckd_alloc.h
Sphinx's memory allocation/deallocation routines.
include
sphinxbase
bitvec.h
Generated by
1.8.17