38#ifndef _LIBUTIL_BITVEC_H_
39#define _LIBUTIL_BITVEC_H_
44#include <sphinxbase/sphinxbase_export.h>
65typedef 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)))
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.
SPHINXBASE_EXPORT size_t bitvec_count_set(bitvec_t *vec, size_t len)
Return the number of bits set in the given bitvector.
Sphinx's memory allocation/deallocation routines.
Basic type definitions used in Sphinx.