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(" ");
     }