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.
@@ -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
- add_num_in_bkt(map, atoll(rest_num), atoll(index) );
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);
@@ -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
  }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bitmapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: