view c/regexParser/bitVector.cc @ 161:584f32e18398 testcode

close
author masa
date Fri, 18 Dec 2015 19:17:02 +0900
parents 166136236891
children c292c67b3100
line wrap: on
line source

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "bitVector.h"
extern BitVectorListPtr allocateBitVectorList();
const BitVectorPtr allocateBitVector();

BitVectorListPtr createBitVector(NodePtr n,BitVectorListPtr bvl) {
    BitVectorListPtr nextBvl = allocateBitVectorList();
    nextBvl->bi = bitSet(n->nodeNumber);
    return nextBvl;
}

const BitVectorPtr allocateBitVector() {

    BitVectorPtr bi = (BitVectorPtr)malloc(sizeof(BitVector));
    if (bi == NULL) {
        fprintf(stderr, "Failed to allocate memory.\n");
        exit(-1);
    }

    bi->bitContainer = (unsigned long*)malloc(sizeof(unsigned long)*bi->arrayNum);
    if (bi->bitContainer == NULL) {
        fprintf(stderr, "Failed to allocate memory.\n");
        exit(-1);
    }

    for (int i = 0; i < bi->arrayNum; i++) {
        bi->bitContainer[i] = 0;
    }

    return bi;
}

BitVectorPtr bitSet(int bitSetPosition) {

    BitVectorPtr bi = allocateBitVector();

    bi->arrayNum = (bitSetPosition + BITBLOCK) / BITBLOCK;

    int arrayPosition = bitSetPosition / BITBLOCK;

    unsigned long tmp = 1 << (bitSetPosition % BITBLOCK);
    bi->bitContainer[arrayPosition] = bi->bitContainer[arrayPosition] | tmp;

    return bi;
}

void bitPrint(BitVectorPtr bi) {
    for (int i = 0; i < bi->arrayNum ; i++) {
        unsigned long vec = bi->bitContainer[i];
        for (int j = 0; j < BITBLOCK; j++) {
            printf( "%lu", vec & 1 );
            vec >>= 1;
        }
        printf(" ");
    }
    puts("");
}