From: John M. S. <sk...@oz...> - 2003-06-21 23:40:11
|
Yamagata Yoriyuki wrote: Still has the redundant tests here. > let add_uchar buf u = > let masq = 0b111111 in > let k = int_of_uchar u in > if k >= 0 && k <= 0x7f then > Buffer.add_char buf (Char.chr k) > else if k >= 0x80 && k <= 0x7ff then begin > Buffer.add_char buf (Char.chr (0xc0 lor (k lsr 6))); > Buffer.add_char buf (Char.chr (0x80 lor (k land masq))) > end else if k >= 0x800 && k <= 0xffff then begin > Buffer.add_char buf (Char.chr (0xe0 lor (k lsr 12))); > Buffer.add_char buf (Char.chr (0x80 lor ((k lsr 6) land masq))); > Buffer.add_char buf (Char.chr (0x80 lor (k land masq))); > end else if k >= 0x10000 && k <= 0x1fffff then begin > Buffer.add_char buf (Char.chr (0xf0 + (k lsr 18))); > Buffer.add_char buf (Char.chr (0x80 lor ((k lsr 12) land masq))); > Buffer.add_char buf (Char.chr (0x80 lor ((k lsr 6) land masq))); > Buffer.add_char buf (Char.chr (0x80 lor (k land masq))); > end else if k >= 0x200000 && k <= 0x3ffffff then begin > Buffer.add_char buf (Char.chr (0xf8 + (k lsr 24))); > Buffer.add_char buf (Char.chr (0x80 lor ((k lsr 18) land masq))); > Buffer.add_char buf (Char.chr (0x80 lor ((k lsr 12) land masq))); > Buffer.add_char buf (Char.chr (0x80 lor ((k lsr 6) land masq))); > Buffer.add_char buf (Char.chr (0x80 lor (k land masq))); > end else begin > Buffer.add_char buf (Char.chr (0xfc + (k lsr 30))); > Buffer.add_char buf (Char.chr (0x80 lor ((k lsr 24) land masq))); > Buffer.add_char buf (Char.chr (0x80 lor ((k lsr 18) land masq))); > Buffer.add_char buf (Char.chr (0x80 lor ((k lsr 12) land masq))); > Buffer.add_char buf (Char.chr (0x80 lor ((k lsr 6) land masq))); > Buffer.add_char buf (Char.chr (0x80 lor (k land masq))); > end -- John Max Skaller, mailto:sk...@oz... snail:10/1 Toxteth Rd, Glebe, NSW 2037, Australia. voice:61-2-9660-0850 |