Mercurial > hg > Applications > Grep
comparison c/bitVector/main.cc @ 51:898e8d9e1c67
implement variable bitContainers array
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 01 Jun 2015 17:20:08 +0900 |
parents | bb0e88fbbe02 |
children | a2826bf4e80a |
comparison
equal
deleted
inserted
replaced
50:bb0e88fbbe02 | 51:898e8d9e1c67 |
---|---|
1 #include <stdio.h> | 1 #include <stdio.h> |
2 #include <stdlib.h> | 2 #include <stdlib.h> |
3 #include <string.h> | 3 #include <string.h> |
4 | 4 |
5 unsigned long bitSet(int bitSetPosition, unsigned long bitContainer) { | 5 typedef struct bitInfo { |
6 int arrayNum; | |
7 unsigned long *bitContainer; | |
8 }BitInfo,*BitInfoPtr; | |
9 | |
10 void bitSet(BitInfoPtr bi, int bitSetPosition) { | |
11 | |
6 unsigned long tmp = 1; | 12 unsigned long tmp = 1; |
13 int arrayPosition = 0; | |
14 | |
15 arrayPosition = bitSetPosition / 64; | |
16 bitSetPosition = bitSetPosition % 64; | |
17 | |
7 tmp = tmp << (63 - bitSetPosition); | 18 tmp = tmp << (63 - bitSetPosition); |
8 bitContainer = bitContainer | tmp; | 19 bi->bitContainer[arrayPosition] = bi->bitContainer[arrayPosition] | tmp; |
9 return bitContainer; | |
10 } | 20 } |
11 | 21 |
12 void bitGet(unsigned long bitContainer) { | 22 void bitPrint(BitInfoPtr bi) { |
13 for (int i = 63; i >= 0; i--) { | 23 for (int i = 0; i < bi->arrayNum ; i++) { |
14 printf( "%lu", ( bitContainer >> i ) & 1 ); | 24 for (int j = 63; j >= 0; j--) { |
25 printf( "%lu", ( bi->bitContainer[i] >> j ) & 1 ); | |
26 } | |
27 printf(" "); | |
15 } | 28 } |
16 puts(""); | 29 puts(""); |
17 } | 30 } |
18 | 31 |
19 int main(int argc, char **argv) { | 32 int main(int argc, char **argv) { |
20 | 33 |
34 BitInfoPtr bi = (BitInfoPtr)malloc(sizeof(BitInfo)); | |
21 int bitSetPosition = 0; | 35 int bitSetPosition = 0; |
22 unsigned long bitContainer = 0; | |
23 | 36 |
24 for (int i = 1; i < argc ; i++) { | 37 for (int i = 1; i < argc ; i++) { |
25 if (strcmp(argv[i],"-n") == 0) { | 38 if (strcmp(argv[i],"-n") == 0) { |
26 bitSetPosition = atoi(argv[i+1]); | 39 bitSetPosition = atoi(argv[i+1]); |
27 } | 40 } |
28 } | 41 } |
29 | 42 |
30 bitContainer = bitSet(bitSetPosition,bitContainer); | 43 bi->arrayNum = (bitSetPosition + 1) / 64; |
31 bitGet(bitContainer); | 44 if (((bitSetPosition + 1) % 64) != 0) bi->arrayNum++; |
45 | |
46 printf("Array Num : %d\n",bi->arrayNum); | |
47 | |
48 unsigned long bitContainer[bi->arrayNum]; | |
49 for (int i = 0; i < bi->arrayNum; i++) { | |
50 bitContainer[i] = 0; | |
51 } | |
52 | |
53 bi->bitContainer = bitContainer; | |
54 bitSet(bi,bitSetPosition); | |
55 bitPrint(bi); | |
32 return 0; | 56 return 0; |
33 } | 57 } |