Annotation of embedaddon/lighttpd/src/bitset.c, revision 1.1

1.1     ! misho       1: #include "buffer.h"
        !             2: #include "bitset.h"
        !             3: 
        !             4: #include <limits.h>
        !             5: #include <stdlib.h>
        !             6: #include <string.h>
        !             7: #include <stdio.h>
        !             8: #include <assert.h>
        !             9: 
        !            10: #define BITSET_BITS \
        !            11:        ( CHAR_BIT * sizeof(size_t) )
        !            12: 
        !            13: #define BITSET_MASK(pos) \
        !            14:        ( ((size_t)1) << ((pos) % BITSET_BITS) )
        !            15: 
        !            16: #define BITSET_WORD(set, pos) \
        !            17:        ( (set)->bits[(pos) / BITSET_BITS] )
        !            18: 
        !            19: #define BITSET_USED(nbits) \
        !            20:        ( ((nbits) + (BITSET_BITS - 1)) / BITSET_BITS )
        !            21: 
        !            22: bitset *bitset_init(size_t nbits) {
        !            23:        bitset *set;
        !            24: 
        !            25:        set = malloc(sizeof(*set));
        !            26:        assert(set);
        !            27: 
        !            28:        set->bits = calloc(BITSET_USED(nbits), sizeof(*set->bits));
        !            29:        set->nbits = nbits;
        !            30: 
        !            31:        assert(set->bits);
        !            32: 
        !            33:        return set;
        !            34: }
        !            35: 
        !            36: void bitset_reset(bitset *set) {
        !            37:        memset(set->bits, 0, BITSET_USED(set->nbits) * sizeof(*set->bits));
        !            38: }
        !            39: 
        !            40: void bitset_free(bitset *set) {
        !            41:        free(set->bits);
        !            42:        free(set);
        !            43: }
        !            44: 
        !            45: void bitset_clear_bit(bitset *set, size_t pos) {
        !            46:        if (pos >= set->nbits) {
        !            47:            SEGFAULT();
        !            48:        }
        !            49: 
        !            50:        BITSET_WORD(set, pos) &= ~BITSET_MASK(pos);
        !            51: }
        !            52: 
        !            53: void bitset_set_bit(bitset *set, size_t pos) {
        !            54:        if (pos >= set->nbits) {
        !            55:            SEGFAULT();
        !            56:        }
        !            57: 
        !            58:        BITSET_WORD(set, pos) |= BITSET_MASK(pos);
        !            59: }
        !            60: 
        !            61: int bitset_test_bit(bitset *set, size_t pos) {
        !            62:        if (pos >= set->nbits) {
        !            63:            SEGFAULT();
        !            64:        }
        !            65: 
        !            66:        return (BITSET_WORD(set, pos) & BITSET_MASK(pos)) != 0;
        !            67: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>