5 #define smb_ucs2_t unsigned short
11 } smb_unicode_table_t;
16 #define UNI_XDIGIT 0x8
17 #define UNI_SPACE 0x10
19 static smb_unicode_table_t map_table[] = {
20 #include "unicode_map_table.h"
27 signed short lower_ofs;
28 signed short upper_ofs;
32 static struct map_range range[0x10000];
33 static int map_range_size;
35 static unsigned short map_range_find(smb_ucs2_t val)
37 unsigned low = 0, high = map_range_size-1;
42 if (range[t].start > val) {
52 #define map_range_flags(val) (range[map_range_find(val)].flags)
53 #define map_range_lower(val) (range[map_range_find(val)].lower_ofs+(val))
54 #define map_range_upper(val) (range[map_range_find(val)].upper_ofs+(val))
56 static void build_map_range(void)
62 range[n].lower_ofs = map_table[0].lower;
63 range[n].upper_ofs = map_table[0].upper;
64 range[n].flags = map_table[0].flags;
66 for (i=1;i<0x10000;i++) {
67 if (range[n].lower_ofs + i == map_table[i].lower &&
68 range[n].upper_ofs + i == map_table[i].upper &&
69 range[n].flags == map_table[i].flags) continue;
74 range[n].lower_ofs = map_table[i].lower - i;
75 range[n].upper_ofs = map_table[i].upper - i;
76 range[n].flags = map_table[i].flags;
80 printf("map_range_size = %d\n", map_range_size);
84 static void test_map_range(void)
88 for (i=0;i<0x10000;i++) {
89 smb_ucs2_t v = (smb_ucs2_t)i;
90 if (map_range_flags(v) != map_table[v].flags) {
91 printf("flags failed at %d\n", i);
94 if (map_range_upper(v) != map_table[v].upper) {
95 printf("upper failed at %d\n", i);
98 if (map_range_lower(v) != map_table[v].lower) {
99 printf("lower failed at %d\n", i);
107 static struct timeval tp1,tp2;
109 static void start_timer()
111 gettimeofday(&tp1,NULL);
114 static double end_timer()
116 gettimeofday(&tp2,NULL);
117 return((tp2.tv_sec - tp1.tv_sec) +
118 (tp2.tv_usec - tp1.tv_usec)*1.0e-6);
121 static void speed_test(void)
123 #define TEST_SIZE (1000*1000)
124 smb_ucs2_t testbuf[TEST_SIZE];
130 for (i=0;i<TEST_SIZE;i++) {
131 testbuf[i] = random();
136 for (i=0;i<TEST_SIZE;i++) {
137 smb_ucs2_t v = testbuf[i];
138 sum += map_table[v].flags;
141 for (i=0;i<TEST_SIZE;i++) {
142 smb_ucs2_t v = testbuf[i];
143 sum += map_table[v].flags;
145 printf("table took %g secs (sum=%d)\n", end_timer(), sum);
149 for (i=0;i<TEST_SIZE;i++) {
150 smb_ucs2_t v = testbuf[i];
151 sum += map_range_flags(v);
154 for (i=0;i<TEST_SIZE;i++) {
155 smb_ucs2_t v = testbuf[i];
156 sum += map_range_flags(v);
158 printf("range took %g secs (sum=%d)\n", end_timer(), sum);