Mercurial > hg > Applications > Grep
diff c/regexParser/bitVector.cc @ 110:a3adc5c24e19 pairPro
start branch
author | masa |
---|---|
date | Fri, 20 Nov 2015 21:02:00 +0900 |
parents | 70069d4647a0 |
children | ca30f8334741 |
line wrap: on
line diff
--- a/c/regexParser/bitVector.cc Fri Nov 20 15:19:09 2015 +0900 +++ b/c/regexParser/bitVector.cc Fri Nov 20 21:02:00 2015 +0900 @@ -7,7 +7,14 @@ int bitBlock = sizeof(unsigned long) * 8; -BitVectorPtr bitSet(int bitSetPosition) { +BitVectorListPtr createBitVector(NodePtr n,BitVectorListPtr bvl) { + BitVectorListPtr nextBvl = allocateBitVectorList(); + nextBvl->bi = bitSet(n->nodeNumber); + nextBvl->initBvl = initBvl; + return nextBvl; +} + +BitVectorPtr createBitVector(int bitSetPosition) { BitVectorPtr bi = (BitVectorPtr)malloc(sizeof(BitVector)); if (bi == NULL) { @@ -21,19 +28,20 @@ exit(-1); } - bi->arrayNum = (bitSetPosition + 1) / bitBlock; - if (((bitSetPosition + 1) % bitBlock) != 0) bi->arrayNum++; - for (int i = 0; i < bi->arrayNum; i++) { bi->bitContainer[i] = 0; } - unsigned long tmp = 1; - int arrayPosition = 0; + + return bi; +} + +BitVectorPtr bitSet(BitVectorPtr bi, int bitSetPosition) { - arrayPosition = bitSetPosition / bitBlock; - bitSetPosition = bitSetPosition % bitBlock; + bi->arrayNum = (bitSetPosition + bitBlock - 1) / bitBlock; - tmp = tmp << (bitBlock - 1 - bitSetPosition); + int arrayPosition = bitSetPosition / bitBlock; + + unsigned long tmp = 1 << (bitSetPosition % bitBlock); bi->bitContainer[arrayPosition] = bi->bitContainer[arrayPosition] | tmp; return bi; @@ -41,8 +49,10 @@ void bitPrint(BitVectorPtr bi) { for (int i = 0; i < bi->arrayNum ; i++) { - for (int j = bitBlock - 1; j >= 0; j--) { - printf( "%lu", ( bi->bitContainer[i] >> j ) & 1 ); + unsigned long vec = bi->bitContainer[i]; + for (int j = 0; j < bitBlock; j++) { + printf( "%lu", vec & 1 ); + vec >>= 1; } printf(" "); }