1 /*
2  * Some code come from http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c
3  */
4 
5 #include "../../src/bsdconv.h"
6 
cbfilter(struct data_rt * data)7 int cbfilter(struct data_rt *data){
8 	uint32_t ucs=0;
9 	int i;
10 	int max=sizeof(ranges) / sizeof(struct uint32_range) - 1;
11 	int min = 0;
12 	int mid;
13 
14 	if(data->len<1 || UCP(data->data)[0]!=1){
15 		return 0;
16 	}
17 
18 	for(i=1;i<data->len;++i){
19 		ucs<<=8;
20 		ucs|=UCP(data->data)[i];
21 	}
22 
23 	if (ucs < ranges[0].first || ucs > ranges[max].last){
24 		//noop
25 	}else while (max >= min) {
26 		mid = (min + max) / 2;
27 		if (ucs > ranges[mid].last)
28 			min = mid + 1;
29 		else if (ucs < ranges[mid].first)
30 			max = mid - 1;
31 		else{
32 			return 1;
33 		}
34 	}
35 
36 	return 0;
37 }
38