source: proto/u8u16/u8u16_compilable.py @ 1814

Last change on this file since 1814 was 708, checked in by cameron, 9 years ago

Use bitutil.Advance in place of Advance

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        adv_bit2 = bitutil.Advance(bit[2])
47        adv_bit3 = bitutil.Advance(bit[3])
48        adv_bit4 = bitutil.Advance(bit[4])
49        adv_bit5 = bitutil.Advance(bit[5])
50        adv_bit6 = bitutil.Advance(bit[6])
51        adv_bit7 = bitutil.Advance(bit[7])
52             
53        # C0-C1 and F5-FF are illegal
54        error_mask = u8.badprefix
55             
56        error_mask |= bitutil.Advance(xE0) & x80_x9F
57        error_mask |= bitutil.Advance(xED) & xA0_xBF
58        error_mask |= bitutil.Advance(xF0) & x80_x8F
59        error_mask |= bitutil.Advance(xF4) & x90_xBF
60             
61        error_mask |= u8anyscope ^ u8.suffix
62        u8.error = error_mask
63        u8lastbyte = u8.unibyte | u8lastscope
64        u16lo[2] = u8lastbyte & bit[2]
65        u16lo[3] = u8lastbyte & bit[3]
66        u16lo[4] = u8lastbyte & bit[4]
67        u16lo[5] = u8lastbyte & bit[5]
68        u16lo[6] = u8lastbyte & bit[6]
69        u16lo[7] = u8lastbyte & bit[7]
70        u16lo[1] = (u8.unibyte & bit[1]) | (u8lastscope & adv_bit7)
71        u16lo[0] = u8lastscope & adv_bit6
72       
73        u16hi[5] = u8lastscope & adv_bit3
74        u16hi[6] = u8lastscope & adv_bit4
75        u16hi[7] = u8lastscope & adv_bit5
76        u16hi[0] = u8.scope33 & bitutil.Advance(adv_bit4)
77        u16hi[1] = u8.scope33 & bitutil.Advance(adv_bit5)
78        u16hi[2] = u8.scope33 & bitutil.Advance(adv_bit6)
79        u16hi[3] = u8.scope33 & bitutil.Advance(adv_bit7)
80        u16hi[4] = u8.scope33 & adv_bit2
81
82        u8surrogate = u8.scope43 | u8.scope44
83        u16hi[0] = u16hi[0] | u8surrogate       
84        u16hi[1] = u16hi[1] | u8surrogate       
85        u16hi[3] = u16hi[3] | u8surrogate       
86        u16hi[4] = u16hi[4] | u8surrogate       
87        u16hi[5] = u16hi[5] | u8.scope44
88
89
90        s42lo1 = ~bit[3] # subtract 1
91        u16lo[1] = u16lo[1] | (u8.scope43 & bitutil.Advance(s42lo1))
92        s42lo0 = bit[2] ^ s42lo1 # borrow *
93        u16lo[0] = u16lo[0] | (u8.scope43 & bitutil.Advance(s42lo0))
94        borrow1 = s42lo1 & ~bit[2]
95        s42hi7 = adv_bit7 ^ borrow1
96        u16hi[7]= u16hi[7] | (u8.scope43 & bitutil.Advance(s42hi7))
97        borrow2 = borrow1 & ~adv_bit7
98        s42hi6 = adv_bit6 ^ borrow2
99        u16hi[6] = u16hi[6] | (u8.scope43 & bitutil.Advance(s42hi6))
100
101        u16lo[2] = u16lo[2] | (u8.scope43 & adv_bit4)
102        u16lo[3] = u16lo[3] | (u8.scope43 & adv_bit5)
103        u16lo[4] = u16lo[4] | (u8.scope43 & adv_bit6)
104        u16lo[5] = u16lo[5] | (u8.scope43 & adv_bit7)
105        u16lo[6] = u16lo[6] | (u8.scope43 & bit[2])
106        u16lo[7] = u16lo[7] | (u8.scope43 & bit[3])
107
108        delmask = u8.prefix | u8.scope32 | u8.scope42
109        return (delmask, u8.error,
110                u16lo[0], u16lo[1], u16lo[2], u16lo[3], u16lo[4], u16lo[5], u16lo[6], u16lo[7], 
111                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.