source: proto/u8u16/u8u16_compilable.py @ 606

Last change on this file since 606 was 606, checked in by lindanl, 9 years ago

u8u16 missed files

File size: 3.7 KB
Line 
1# -*- coding: utf-8 -*-
2def main(u8, mask):
3        u8.unibyte = (~bit[0]);
4        u8.prefix = (bit[0] & bit[1]);
5        u8.prefix2 = (u8.prefix &~ bit[2]);
6        temp1 = (bit[2] &~ bit[3]);
7        u8.prefix3 = (u8.prefix & temp1);
8        temp2 = (bit[2] & bit[3]);
9        u8.prefix4 = (u8.prefix & temp2);
10        u8.suffix = (bit[0] &~ bit[1]);
11        temp3 = (bit[2] | bit[3]);
12        temp4 = (u8.prefix &~ temp3);
13        temp5 = (bit[4] | bit[5]);
14        temp6 = (temp5 | bit[6]);
15        temp7 = (temp4 &~ temp6);
16        temp8 = (bit[6] | bit[7]);
17        temp9 = (bit[5] & temp8);
18        temp10 = (bit[4] | temp9);
19        temp11 = (u8.prefix4 & temp10);
20        u8.badprefix = (temp7 | temp11);
21        temp12 = (temp5 | temp8);
22        xE0 = (u8.prefix3 &~ temp12);
23        temp13 = (bit[4] & bit[5]);
24        temp14 = (bit[7] &~ bit[6]);
25        temp15 = (temp13 & temp14);
26        xED = (u8.prefix3 & temp15);
27        xF0 = (u8.prefix4 &~ temp12);
28        temp16 = (bit[5] &~ bit[4]);
29        temp17 = (temp16 &~ temp8);
30        xF4 = (u8.prefix4 & temp17);
31        xA0_xBF = (u8.suffix & bit[2]);
32        x80_x9F = (u8.suffix &~ bit[2]);
33        x90_xBF = (u8.suffix & temp3);
34        x80_x8F = (u8.suffix &~ temp3);
35
36      #
37        u8.scope22 = bitutil.Advance(u8.prefix2)
38        u8.scope32 = bitutil.Advance(u8.prefix3)
39        u8.scope33 = bitutil.Advance(u8.scope32)
40        u8.scope42 = bitutil.Advance(u8.prefix4)
41        u8.scope43 = bitutil.Advance(u8.scope42)
42        u8.scope44 = bitutil.Advance(u8.scope43)
43        u8lastscope = u8.scope22 | u8.scope33 | u8.scope44
44        u8anyscope = u8lastscope | u8.scope32 | u8.scope42 | u8.scope43
45
46             
47        # C0-C1 and F5-FF are illegal
48        error_mask = u8.badprefix
49             
50        error_mask |= Advance(xE0) & x80_x9F
51        error_mask |= Advance(xED) & xA0_xBF
52        error_mask |= Advance(xF0) & x80_x8F
53        error_mask |= Advance(xF4) & x90_xBF
54             
55        error_mask |= u8anyscope ^ u8.suffix
56        u8.error = error_mask
57        u8lastbyte = u8.unibyte | u8lastscope
58        u16lo[2] = u8lastbyte & bit[2]
59        u16lo[3] = u8lastbyte & bit[3]
60        u16lo[4] = u8lastbyte & bit[4]
61        u16lo[5] = u8lastbyte & bit[5]
62        u16lo[6] = u8lastbyte & bit[6]
63        u16lo[7] = u8lastbyte & bit[7]
64        u16lo[1] = (u8.unibyte & bit[1]) | (u8lastscope & bitutil.Advance(bit[7]))
65        u16lo[0] = u8lastscope & bitutil.Advance(bit[6])
66       
67        u16hi[5] = u8lastscope & bitutil.Advance(bit[3])
68        u16hi[6] = u8lastscope & bitutil.Advance(bit[4])
69        u16hi[7] = u8lastscope & bitutil.Advance(bit[5])
70        u16hi[0] = u8.scope33 & bitutil.Advance(bitutil.Advance(bit[4]))
71        u16hi[1] = u8.scope33 & bitutil.Advance(bitutil.Advance(bit[5]))
72        u16hi[2] = u8.scope33 & bitutil.Advance(bitutil.Advance(bit[6]))
73        u16hi[3] = u8.scope33 & bitutil.Advance(bitutil.Advance(bit[7]))
74        u16hi[4] = u8.scope33 & bitutil.Advance(bit[2])
75
76        u8surrogate = u8.scope43 | u8.scope44
77        u16hi[0] = u16hi[0] | u8surrogate       
78        u16hi[1] = u16hi[1] | u8surrogate       
79        u16hi[3] = u16hi[3] | u8surrogate       
80        u16hi[4] = u16hi[4] | u8surrogate       
81        u16hi[5] = u16hi[5] | u8.scope44
82
83
84        s42lo1 = ~bit[3] # subtract 1
85        u16lo[1] = u16lo[1] | (u8.scope43 & bitutil.Advance(s42lo1))
86        s42lo0 = bit[2] ^ s42lo1 # borrow *
87        u16lo[0] = u16lo[0] | (u8.scope43 & bitutil.Advance(s42lo0))
88        borrow1 = s42lo1 & ~bit[2]
89        Advance_bit7 = bitutil.Advance(bit[7])
90        s42hi7 = Advance_bit7 ^ borrow1
91        u16hi[7]= u16hi[7] | (u8.scope43 & bitutil.Advance(s42hi7))
92        borrow2 = borrow1 & ~Advance_bit7
93        s42hi6 = bitutil.Advance(bit[6]) ^ borrow2
94        u16hi[6] = u16hi[6] | (u8.scope43 & bitutil.Advance(s42hi6))
95
96        u16lo[2] = u16lo[2] | (u8.scope43 & bitutil.Advance(bit[4]))
97        u16lo[3] = u16lo[3] | (u8.scope43 & bitutil.Advance(bit[5]))
98        u16lo[4] = u16lo[4] | (u8.scope43 & bitutil.Advance(bit[6]))
99        u16lo[5] = u16lo[5] | (u8.scope43 & bitutil.Advance(bit[7]))
100        u16lo[6] = u16lo[6] | (u8.scope43 & bit[2])
101        u16lo[7] = u16lo[7] | (u8.scope43 & bit[3])
102
103        delmask = u8.prefix | u8.scope32 | u8.scope42
104        return (delmask, u8.error,
105                u16lo[0], u16lo[1], u16lo[2], u16lo[3], u16lo[4], u16lo[5], u16lo[6], u16lo[7], 
106                u16hi[0], u16hi[1], u16hi[2], u16hi[3], u16hi[4], u16hi[5], u16hi[6], u16hi[7])
Note: See TracBrowser for help on using the repository browser.