comparison c/bitVector/main.cc @ 92:9a1bb8f439f5

fix (not correct running)
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Mon, 26 Oct 2015 18:36:19 +0900
parents 3d1c71fbd4a4
children 23e796173c91
comparison
equal deleted inserted replaced
91:912d7bd51f38 92:9a1bb8f439f5
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 #include "bitInfo.h" 4 #include "bitInfo.h"
5 5
6 void bitPrint(BitInfoPtr bi);
7
6 int bitBlock = sizeof(unsigned long) * 8; 8 int bitBlock = sizeof(unsigned long) * 8;
7 9
8 void bitSet(BitInfoPtr bi, int bitSetPosition) { 10 BitInfoPtr bitSet(int bitSetPosition) {
9 11
12 BitInfoPtr bi = (BitInfoPtr)malloc(sizeof(BitInfo));
13
14 bi->arrayNum = (bitSetPosition + 1) / bitBlock;
15 if (((bitSetPosition + 1) % bitBlock) != 0) bi->arrayNum++;
16
17 printf("Array Num : %d\n",bi->arrayNum);
18
19 unsigned long bitContainer[bi->arrayNum];
20 for (int i = 0; i < bi->arrayNum; i++) {
21 bitContainer[i] = 0;
22 }
10 unsigned long tmp = 1; 23 unsigned long tmp = 1;
11 int arrayPosition = 0; 24 int arrayPosition = 0;
12 25
13 arrayPosition = bitSetPosition / bitBlock; 26 arrayPosition = bitSetPosition / bitBlock;
14 bitSetPosition = bitSetPosition % bitBlock; 27 bitSetPosition = bitSetPosition % bitBlock;
15 28
29
30 bi->bitContainer = bitContainer;
16 tmp = tmp << (bitBlock - 1 - bitSetPosition); 31 tmp = tmp << (bitBlock - 1 - bitSetPosition);
17 bi->bitContainer[arrayPosition] = bi->bitContainer[arrayPosition] | tmp; 32 bi->bitContainer[arrayPosition] = bi->bitContainer[arrayPosition] | tmp;
33
34 bitPrint(bi);
35
36 return bi;
18 } 37 }
19 38
20 void bitPrint(BitInfoPtr bi) { 39 void bitPrint(BitInfoPtr bi) {
21 for (int i = 0; i < bi->arrayNum ; i++) { 40 for (int i = 0; i < bi->arrayNum ; i++) {
22 for (int j = bitBlock - 1; j >= 0; j--) { 41 for (int j = bitBlock - 1; j >= 0; j--) {
27 puts(""); 46 puts("");
28 } 47 }
29 48
30 int main(int argc, char **argv) { 49 int main(int argc, char **argv) {
31 50
32 BitInfoPtr bi = (BitInfoPtr)malloc(sizeof(BitInfo));
33 int bitSetPosition = 0; 51 int bitSetPosition = 0;
34 52
35 for (int i = 1; i < argc ; i++) { 53 for (int i = 1; i < argc ; i++) {
36 if (strcmp(argv[i],"-n") == 0) { 54 if (strcmp(argv[i],"-n") == 0) {
37 bitSetPosition = atoi(argv[i+1]); 55 bitSetPosition = atoi(argv[i+1]);
38 } 56 }
39 } 57 }
40 58
41 bi->arrayNum = (bitSetPosition + 1) / bitBlock; 59 BitInfoPtr bi = bitSet(bitSetPosition);
42 if (((bitSetPosition + 1) % bitBlock) != 0) bi->arrayNum++;
43
44 printf("Array Num : %d\n",bi->arrayNum);
45
46 unsigned long bitContainer[bi->arrayNum];
47 for (int i = 0; i < bi->arrayNum; i++) {
48 bitContainer[i] = 0;
49 }
50
51 bi->bitContainer = bitContainer;
52 bitSet(bi,bitSetPosition);
53 bitPrint(bi); 60 bitPrint(bi);
54 return 0; 61 return 0;
55 } 62 }