bitmapper 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ext/bitmapper/bit_mapper_wrap.c +18 -3
- data/ext/bitmapper/bit_mapper_wrap.h +4 -0
- data/ext/bitmapper/bitmapper.c +24 -3
- metadata +1 -1
|
@@ -29,6 +29,7 @@ void allocate_map(Bitmapper* map, int index_len){
|
|
|
29
29
|
map->bkt_size = pow(10, 10 - index_len);
|
|
30
30
|
map->bkt_count = size;
|
|
31
31
|
map->index_len = index_len;
|
|
32
|
+
map->white_list_char = NULL;
|
|
32
33
|
sprintf(map->fill_str, "%%llu%%0%illu\n",10-index_len);
|
|
33
34
|
}
|
|
34
35
|
|
|
@@ -45,8 +46,19 @@ void free_map(Bitmapper* map){
|
|
|
45
46
|
map->bkts[i] = NULL;
|
|
46
47
|
}
|
|
47
48
|
}
|
|
49
|
+
if(map->white_list_char != NULL) free(map->white_list_char);
|
|
48
50
|
if(map->bkts != NULL) free(map->bkts);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
void set_white_list_char(Bitmapper* map, char c){
|
|
54
|
+
if(map->white_list_char !=NULL) free(map->white_list_char);
|
|
55
|
+
map->white_list_char = (char*)malloc(sizeof(char));
|
|
56
|
+
map->white_list_char[0] = c;
|
|
57
|
+
}
|
|
49
58
|
|
|
59
|
+
void clear_white_list_char(Bitmapper* map){
|
|
60
|
+
if(map->white_list_char !=NULL) free(map->white_list_char);
|
|
61
|
+
map->white_list_char = NULL;
|
|
50
62
|
}
|
|
51
63
|
|
|
52
64
|
/*
|
|
@@ -161,11 +173,14 @@ int status_num(Bitmapper* map,unsigned long long int full_num){
|
|
|
161
173
|
*/
|
|
162
174
|
int add_numbers_in_file(Bitmapper* map,FILE *in){
|
|
163
175
|
char scan_str[20];
|
|
164
|
-
char msisdn[15], index[map->index_len], rest_num[10-map->index_len];
|
|
176
|
+
char msisdn[15], index[map->index_len+1], rest_num[10-map->index_len+1];
|
|
165
177
|
sprintf(scan_str, "%%%is%%%is\n",map->index_len, 10-map->index_len);
|
|
166
178
|
while(fgets(msisdn, 15, in)!=NULL){
|
|
167
179
|
sscanf(msisdn,scan_str, index, rest_num);
|
|
168
|
-
|
|
180
|
+
if(map->white_list_char !=NULL && strncmp(index, map->white_list_char, 1) != 0){
|
|
181
|
+
}else{
|
|
182
|
+
add_num_in_bkt(map, atoll(rest_num), atoll(index) );
|
|
183
|
+
}
|
|
169
184
|
}
|
|
170
185
|
}
|
|
171
186
|
|
|
@@ -179,7 +194,7 @@ int add_numbers_in_file(Bitmapper* map,FILE *in){
|
|
|
179
194
|
*/
|
|
180
195
|
int remove_numbers_in_file(Bitmapper* map,FILE *del){
|
|
181
196
|
char scan_str[20];
|
|
182
|
-
char msisdn[15], index[map->index_len], rest_num[10-map->index_len];
|
|
197
|
+
char msisdn[15], index[map->index_len+1], rest_num[10-map->index_len+1];
|
|
183
198
|
sprintf(scan_str, "%%%is%%%is\n",map->index_len, 10-map->index_len);
|
|
184
199
|
while(fgets(msisdn, 15, del)!=NULL){
|
|
185
200
|
sscanf(msisdn,scan_str, index, rest_num);
|
|
@@ -12,6 +12,7 @@ typedef struct Bitmapper{
|
|
|
12
12
|
unsigned long long int bkt_size; /* size of each bucket in bits */
|
|
13
13
|
/* the format specifier used to dump number to file from buckets */
|
|
14
14
|
int index_len;
|
|
15
|
+
char *white_list_char;
|
|
15
16
|
char fill_str[20];
|
|
16
17
|
} Bitmapper;
|
|
17
18
|
|
|
@@ -19,6 +20,9 @@ Bitmapper* create_map();
|
|
|
19
20
|
void allocate_map(Bitmapper*, int);
|
|
20
21
|
void free_map(Bitmapper*);
|
|
21
22
|
BitBucket* create_bucket_for(BitBucket*, unsigned long long int);
|
|
23
|
+
void set_white_list_char(Bitmapper*, char);
|
|
24
|
+
void clear_white_list_char(Bitmapper*);
|
|
25
|
+
|
|
22
26
|
int add_num_in_bkt(Bitmapper* ,unsigned long long int, unsigned long long int);
|
|
23
27
|
int add_num(Bitmapper* ,unsigned long long int);
|
|
24
28
|
int remove_num_in_bkt(Bitmapper* ,unsigned long long int, unsigned long long int);
|
data/ext/bitmapper/bitmapper.c
CHANGED
|
@@ -155,7 +155,6 @@ VALUE bm_set(VALUE self, VALUE num){
|
|
|
155
155
|
return (VALUE)Qtrue;
|
|
156
156
|
else
|
|
157
157
|
rb_raise(rb_eTypeError, "not valid number");
|
|
158
|
-
return (VALUE)Qfalse;
|
|
159
158
|
}
|
|
160
159
|
|
|
161
160
|
/*
|
|
@@ -171,7 +170,6 @@ VALUE bm_clear(VALUE self, VALUE num){
|
|
|
171
170
|
return (VALUE)Qtrue;
|
|
172
171
|
else
|
|
173
172
|
rb_raise(rb_eTypeError, "not valid number");
|
|
174
|
-
return (VALUE)Qfalse;
|
|
175
173
|
}
|
|
176
174
|
|
|
177
175
|
/*
|
|
@@ -192,7 +190,29 @@ VALUE bm_num_status(VALUE self, VALUE num){
|
|
|
192
190
|
else
|
|
193
191
|
rb_raise(rb_eTypeError, "not valid number");
|
|
194
192
|
return (VALUE)Qfalse;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
VALUE bm_set_filter(VALUE self, VALUE vCh){
|
|
197
|
+
int status;
|
|
198
|
+
char ch;
|
|
199
|
+
Bitmapper* map;
|
|
200
|
+
|
|
201
|
+
Data_Get_Struct(self, Bitmapper, map);
|
|
202
|
+
vCh = rb_funcall(vCh, rb_intern("to_s"), 0); /* hack */
|
|
203
|
+
ch = NUM2CHR(vCh);
|
|
204
|
+
set_white_list_char(map, ch);
|
|
205
|
+
return (VALUE)Qtrue;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
VALUE bm_clear_filter(VALUE self){
|
|
209
|
+
int status;
|
|
210
|
+
VALUE return_val;
|
|
211
|
+
Bitmapper* map;
|
|
195
212
|
|
|
213
|
+
Data_Get_Struct(self, Bitmapper, map);
|
|
214
|
+
clear_white_list_char(map);
|
|
215
|
+
return (VALUE)Qtrue;
|
|
196
216
|
}
|
|
197
217
|
|
|
198
218
|
void Init_bitmapper(){
|
|
@@ -204,11 +224,12 @@ void Init_bitmapper(){
|
|
|
204
224
|
rb_define_method(rb_cBitmapper, "add", bm_add_from_file, 1);
|
|
205
225
|
rb_define_method(rb_cBitmapper, "remove", bm_remove_from_file, 1);
|
|
206
226
|
rb_define_method(rb_cBitmapper, "dump_to", bm_dump_to_file, 1);
|
|
227
|
+
rb_define_method(rb_cBitmapper, "set_filter", bm_set_filter, 1);
|
|
228
|
+
rb_define_method(rb_cBitmapper, "clear_filter", bm_clear_filter, 0);
|
|
207
229
|
rb_define_method(rb_cBitmapper, "load_from_str", bm_load_str_to_bkt, 2);
|
|
208
230
|
rb_define_method(rb_cBitmapper, "dump_to_str", bm_dump_bkt_str, 2);
|
|
209
231
|
|
|
210
232
|
rb_define_method(rb_cBitmapper, "status?", bm_num_status, 1);
|
|
211
233
|
rb_define_method(rb_cBitmapper, "set", bm_set, 1);
|
|
212
234
|
rb_define_method(rb_cBitmapper, "clear", bm_clear, 1);
|
|
213
|
-
|
|
214
235
|
}
|