efront 4.29.1 → 4.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,107 +0,0 @@
1
- // 部分算法参考 https://www.cnblogs.com/jackyzzy/archive/2012/04/26/2471165.html
2
- "include ./encodeRange.h";
3
- var __dist, // buff
4
- L = R_max, // low Cardinal
5
- R = R_max, // range Cardinal
6
- d = 0, // digits Cardinal
7
- n = 0; // follow
8
-
9
- function OutputCode(t) {
10
- t = t & 0xff;
11
- __dist.push(t);
12
- }
13
- function init() {
14
- L = R_max;
15
- R = R_max;
16
- n = 0;
17
- d = 0;
18
- }
19
- function encode(cf, f, T) {
20
- var i, H;
21
- // 区间计算
22
- R = R / T | 0;
23
- L += cf * R;
24
- R = f * R;
25
- // 调整区间
26
- while (R <= R_min) {
27
- H = L + R - 1;
28
- // 判断是否有延迟数字
29
- if (n !== 0) {
30
- if (H <= R_max) {
31
- // 区间下沿
32
- OutputCode(d);
33
- for (i = 1; i < n; i++)OutputCode(0xff);
34
- n = 0;
35
- L += R_max;
36
- }
37
- else if (L >= R_max) {
38
- // 区间上沿
39
- OutputCode(d + 1);
40
- for (i = 1; i < n; i++)OutputCode(0x00);
41
- n = 0;
42
- }
43
- else {
44
- // 趋向未定
45
- n++;
46
- // 扩展区间
47
- L = shl(L, 8) & R_max - 1;
48
- R = shl(R, 8);
49
- continue;
50
- }
51
- }
52
- // 判断最高位数字
53
- if (((L ^ H) & shl(0xff, shift_bits)) === 0) {
54
- // 出现不变数字
55
- OutputCode(shr(L, shift_bits));
56
- }
57
- else {
58
- // 出现延迟数字
59
- L -= R_max;
60
- d = shr(L, shift_bits);
61
- n = 1;
62
- }
63
- // 扩展区间
64
- L = shl(L, 8) & R_max - 1 | L & R_max;
65
- L = shl(L, 0);
66
- R = shl(R, 8);
67
- }
68
- }
69
- function finish() {
70
- var i;
71
- if (n !== 0) {
72
- if (L < R_max) {
73
- // 趋向下沿
74
- OutputCode(d);
75
- for (i = 1; i < n; i++)OutputCode(0xff);
76
- }
77
- else {
78
- // 走向上沿
79
- OutputCode(d + 1);
80
- for (i = 1; i < n; i++)OutputCode(0x00);
81
- }
82
- }
83
- // 输出剩余编码
84
- L = shl(L, 1);
85
- i = code_bits + 1;
86
- do {
87
- i -= 8;
88
- OutputCode(shr(L, i) & 0xff);
89
- } while (i > 0);
90
- }
91
- function main(buff) {
92
- init();
93
- var tree = new BitTree(symbol_no);
94
- var dist = __dist = [];
95
- writeLEB128(dist, 0, buff.length);
96
- for (var cx = 0, dx = buff.length; cx < dx; cx++) {
97
- var b = buff[cx];
98
- var f = tree.counts[b];
99
- var cf = tree.sumTo(b);
100
- encode(cf, f, tree.total);
101
- tree.count(b);
102
- }
103
- finish();
104
- __dist = null;
105
- return dist;
106
- }
107
- module.exports = main;
@@ -1,40 +0,0 @@
1
- function test(size) {
2
- var source = Array(size);
3
- for (var cx = 0, dx = source.length; cx < dx; cx++)source[cx] = 32 + Math.random() * 80 | 0;
4
- var time = new Date;
5
- var encoded = encodeRange(source);
6
- var d1 = new Date - time;
7
- time = new Date;
8
- var decoded = decodeRange(encoded);
9
- var d2 = new Date - time;
10
- for (var cx = 0, dx = size + 1; cx < dx; cx++) {
11
- if (decoded[cx] !== source[cx]) {
12
- console.log({
13
- size,
14
- source,
15
- encoded,
16
- decoded,
17
- cx,
18
- scx: source[cx],
19
- ecx: encoded[cx],
20
- dcx: decoded[cx],
21
- })
22
- throw new Error(i18n`解码异常!`);
23
- }
24
- }
25
- console.log({
26
- 数据大小: source.length,
27
- 压缩后大小: encoded.length,
28
- 编码用时: d1,
29
- 解码用时: d2,
30
- })
31
- }
32
- test(20);
33
- test(200);
34
- test(1024);
35
- test(2048);
36
- test(20480);
37
- test(204800);
38
- test(2048000);
39
- // test(20480000);
40
- // test(80000000);
@@ -1,77 +0,0 @@
1
- readBinary proc buff,bitoffset,bitlength
2
- local num,index,bitdelta,delta
3
- mov eax,90007h
4
- mov num,0
5
- mov eax,bitoffset
6
- shr eax,3
7
- mov index,eax
8
- mov ebx,bitoffset
9
- shl eax,3
10
- sub ebx,eax
11
- mov bitdelta,ebx
12
- .if bitdelta
13
- mov eax,8
14
- sub eax,ebx
15
- mov bitdelta,eax
16
- mov ebx,buff
17
- add ebx,index
18
- mov eax,0
19
- mov al,BYTE ptr[ebx]
20
- mov delta,eax
21
- mov eax,index
22
- inc eax
23
- mov index,eax
24
- mov eax,bitlength
25
- sub eax,bitdelta
26
- mov bitlength,eax
27
- mov eax,1
28
- mov ecx,bitdelta
29
- shl eax,cl
30
- sub eax,1
31
- and eax,delta
32
- mov num,eax
33
- mov eax,bitlength
34
- and eax,07fffffffh
35
- .if bitlength !=eax
36
- mov eax,0
37
- sub eax,bitlength
38
- mov ecx,eax
39
- mov eax,num
40
- shr eax,cl
41
- mov num,eax
42
- mov bitlength,0
43
- .endif
44
- .endif
45
- .while bitlength>=8
46
- mov eax,bitlength
47
- sub eax,8
48
- mov bitlength,eax
49
- mov eax,num
50
- shl eax,8
51
- mov ebx,buff
52
- add ebx,index
53
- mov al,BYTE ptr[ebx]
54
- mov num,eax
55
- mov eax,index
56
- inc eax
57
- mov index,eax
58
- .endw
59
- .if bitlength
60
- mov ebx,buff
61
- add ebx,index
62
- mov al,BYTE ptr[ebx]
63
- and eax,0ffh
64
- mov delta,eax
65
- mov eax,num
66
- mov ecx,bitlength
67
- shl eax,cl
68
- mov ecx,8
69
- sub ecx,bitlength
70
- mov ebx,delta
71
- shr ebx,cl
72
- or eax,ebx
73
- mov num,eax
74
- .endif
75
- mov eax,num
76
- ret
77
- readBinary endp
@@ -1,31 +0,0 @@
1
- /**
2
- * 从二进制读取指定长度的数据
3
- * @param {Buffer} buff
4
- * @param {number} bitoffset
5
- * @param {number} bitlength 不大于31
6
- * @returns 0x7fffffff以内的正整数
7
- */
8
- function readBinary(buff, bitoffset, bitlength) {
9
- var num = 0, index = bitoffset >> 3;
10
- var bitdelta = bitoffset - (index << 3);
11
- if (bitdelta > 0) {
12
- bitdelta = 8 - bitdelta;
13
- var delta = buff[index++];
14
- bitlength -= bitdelta;
15
- num = delta & (1 << bitdelta) - 1;
16
- if (bitlength < 0) {
17
- num = num >> -bitlength;
18
- bitlength = 0;
19
- }
20
- }
21
- while (bitlength >= 8) {
22
- bitlength -= 8;
23
- num = num << 8 | buff[index++];
24
- }
25
- if (bitlength > 0) {
26
- var delta = buff[index];
27
- num = num << bitlength | delta >> 8 - bitlength;
28
- }
29
- return num;
30
- }
31
- module.exports = readBinary;
@@ -1,37 +0,0 @@
1
- /**
2
- * 写入指定长度的二进制数据
3
- * @param {Buffer} buff
4
- * @param {number} bitoffset
5
- * @param {number} bitlength 不大于31
6
- * @param {number} binary 不大于0x7fffffff
7
- */
8
- function writeBinary(buff, bitoffset, bitlength, binary) {
9
- var index = bitoffset >> 3;
10
- var bitdelta = bitoffset - (index << 3);
11
- if (bitdelta > 0) {
12
- bitdelta = 8 - bitdelta;
13
- var delta = buff[index];
14
- bitlength -= bitdelta;
15
- var rest = 0;
16
- if (bitlength < 0) {
17
- rest = -bitlength;
18
- bitlength = 0;
19
- }
20
- delta = delta & (1 << 8) - (1 << bitdelta) | binary >> bitlength << rest | delta & (1 << rest) - 1;
21
- buff[index] = delta;
22
- binary = binary & (1 << bitlength) - 1;
23
- index++;
24
- }
25
- while (bitlength >= 8) {
26
- bitlength -= 8;
27
- buff[index++] = binary >> bitlength;
28
- binary = binary & (1 << bitlength) - 1;
29
- }
30
- if (bitlength > 0) {
31
- var delta = buff[index];
32
- bitdelta = 8 - bitlength;
33
- delta = delta & (1 << bitdelta) - 1 | binary << bitdelta
34
- buff[index] = delta;
35
- }
36
- }
37
- module.exports = writeBinary;