38 #ifndef _LIBUTIL_BITVEC_H_
39 #define _LIBUTIL_BITVEC_H_
44 #include <sphinxbase/sphinxbase_export.h>
64 #define BITVEC_BITS 32
65 typedef uint32 bitvec_t;
70 #define bitvec_size(n) (((n)+BITVEC_BITS-1)/BITVEC_BITS)
75 #define bitvec_alloc(n) ckd_calloc(bitvec_size(n), sizeof(bitvec_t))
87 #define bitvec_free(v) ckd_free(v)
95 #define bitvec_set(v,b) (v[(b)/BITVEC_BITS] |= (1UL << ((b) & (BITVEC_BITS-1))))
103 #define bitvec_set_all(v,n) memset(v, (bitvec_t)-1, \
104 (((n)+BITVEC_BITS-1)/BITVEC_BITS) * \
112 #define bitvec_clear(v,b) (v[(b)/BITVEC_BITS] &= ~(1UL << ((b) & (BITVEC_BITS-1))))
120 #define bitvec_clear_all(v,n) memset(v, 0, (((n)+BITVEC_BITS-1)/BITVEC_BITS) * \
129 #define bitvec_is_set(v,b) (v[(b)/BITVEC_BITS] & (1UL << ((b) & (BITVEC_BITS-1))))
137 #define bitvec_is_clear(v,b) (! (bitvec_is_set(v,b)))
Sphinx's memory allocation/deallocation routines.
Basic type definitions used in Sphinx.
SPHINXBASE_EXPORT size_t bitvec_count_set(bitvec_t *vec, size_t len)
Return the number of bits set in the given bitvector.
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.