7z-iterator 1.1.2 → 1.3.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.
- package/dist/cjs/FileEntry.d.cts +12 -4
- package/dist/cjs/FileEntry.d.ts +12 -4
- package/dist/cjs/FileEntry.js +52 -24
- package/dist/cjs/FileEntry.js.map +1 -1
- package/dist/cjs/SevenZipIterator.d.cts +25 -2
- package/dist/cjs/SevenZipIterator.d.ts +25 -2
- package/dist/cjs/SevenZipIterator.js +68 -21
- package/dist/cjs/SevenZipIterator.js.map +1 -1
- package/dist/cjs/index.d.cts +1 -2
- package/dist/cjs/index.d.ts +1 -2
- package/dist/cjs/index.js +19 -3
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/lib/streamToSource.d.cts +8 -11
- package/dist/cjs/lib/streamToSource.d.ts +8 -11
- package/dist/cjs/lib/streamToSource.js +21 -67
- package/dist/cjs/lib/streamToSource.js.map +1 -1
- package/dist/cjs/lzma/Lzma2ChunkParser.d.cts +73 -0
- package/dist/cjs/lzma/Lzma2ChunkParser.d.ts +73 -0
- package/dist/cjs/lzma/Lzma2ChunkParser.js +148 -0
- package/dist/cjs/lzma/Lzma2ChunkParser.js.map +1 -0
- package/dist/cjs/lzma/index.d.cts +13 -0
- package/dist/cjs/lzma/index.d.ts +13 -0
- package/dist/cjs/lzma/index.js +63 -0
- package/dist/cjs/lzma/index.js.map +1 -0
- package/dist/cjs/lzma/stream/transforms.d.cts +38 -0
- package/dist/cjs/lzma/stream/transforms.d.ts +38 -0
- package/dist/cjs/lzma/stream/transforms.js +149 -0
- package/dist/cjs/lzma/stream/transforms.js.map +1 -0
- package/dist/cjs/lzma/sync/Lzma2Decoder.d.cts +30 -0
- package/dist/cjs/lzma/sync/Lzma2Decoder.d.ts +30 -0
- package/dist/cjs/lzma/sync/Lzma2Decoder.js +135 -0
- package/dist/cjs/lzma/sync/Lzma2Decoder.js.map +1 -0
- package/dist/cjs/lzma/sync/LzmaDecoder.d.cts +82 -0
- package/dist/cjs/lzma/sync/LzmaDecoder.d.ts +82 -0
- package/dist/cjs/lzma/sync/LzmaDecoder.js +440 -0
- package/dist/cjs/lzma/sync/LzmaDecoder.js.map +1 -0
- package/dist/cjs/lzma/sync/RangeDecoder.d.cts +69 -0
- package/dist/cjs/lzma/sync/RangeDecoder.d.ts +69 -0
- package/dist/cjs/lzma/sync/RangeDecoder.js +162 -0
- package/dist/cjs/lzma/sync/RangeDecoder.js.map +1 -0
- package/dist/cjs/lzma/types.d.cts +110 -0
- package/dist/cjs/lzma/types.d.ts +110 -0
- package/dist/cjs/lzma/types.js +264 -0
- package/dist/cjs/lzma/types.js.map +1 -0
- package/dist/cjs/nextEntry.js +24 -26
- package/dist/cjs/nextEntry.js.map +1 -1
- package/dist/cjs/sevenz/ArchiveSource.d.cts +16 -0
- package/dist/cjs/sevenz/ArchiveSource.d.ts +16 -0
- package/dist/cjs/sevenz/ArchiveSource.js +69 -0
- package/dist/cjs/sevenz/ArchiveSource.js.map +1 -1
- package/dist/cjs/sevenz/FolderStreamSplitter.d.cts +101 -0
- package/dist/cjs/sevenz/FolderStreamSplitter.d.ts +101 -0
- package/dist/cjs/sevenz/FolderStreamSplitter.js +229 -0
- package/dist/cjs/sevenz/FolderStreamSplitter.js.map +1 -0
- package/dist/cjs/sevenz/SevenZipParser.d.cts +71 -10
- package/dist/cjs/sevenz/SevenZipParser.d.ts +71 -10
- package/dist/cjs/sevenz/SevenZipParser.js +574 -203
- package/dist/cjs/sevenz/SevenZipParser.js.map +1 -1
- package/dist/cjs/sevenz/codecs/BZip2.js +2 -1
- package/dist/cjs/sevenz/codecs/BZip2.js.map +1 -1
- package/dist/cjs/sevenz/codecs/Bcj.d.cts +5 -4
- package/dist/cjs/sevenz/codecs/Bcj.d.ts +5 -4
- package/dist/cjs/sevenz/codecs/Bcj.js +102 -8
- package/dist/cjs/sevenz/codecs/Bcj.js.map +1 -1
- package/dist/cjs/sevenz/codecs/BcjArm.d.cts +5 -4
- package/dist/cjs/sevenz/codecs/BcjArm.d.ts +5 -4
- package/dist/cjs/sevenz/codecs/BcjArm.js +51 -9
- package/dist/cjs/sevenz/codecs/BcjArm.js.map +1 -1
- package/dist/cjs/sevenz/codecs/Copy.d.cts +2 -4
- package/dist/cjs/sevenz/codecs/Copy.d.ts +2 -4
- package/dist/cjs/sevenz/codecs/Copy.js +2 -15
- package/dist/cjs/sevenz/codecs/Copy.js.map +1 -1
- package/dist/cjs/sevenz/codecs/Deflate.d.cts +6 -4
- package/dist/cjs/sevenz/codecs/Deflate.d.ts +6 -4
- package/dist/cjs/sevenz/codecs/Deflate.js +4 -9
- package/dist/cjs/sevenz/codecs/Deflate.js.map +1 -1
- package/dist/cjs/sevenz/codecs/Delta.d.cts +5 -4
- package/dist/cjs/sevenz/codecs/Delta.d.ts +5 -4
- package/dist/cjs/sevenz/codecs/Delta.js +29 -10
- package/dist/cjs/sevenz/codecs/Delta.js.map +1 -1
- package/dist/cjs/sevenz/codecs/Lzma.d.cts +5 -2
- package/dist/cjs/sevenz/codecs/Lzma.d.ts +5 -2
- package/dist/cjs/sevenz/codecs/Lzma.js +13 -28
- package/dist/cjs/sevenz/codecs/Lzma.js.map +1 -1
- package/dist/cjs/sevenz/codecs/Lzma2.d.cts +9 -3
- package/dist/cjs/sevenz/codecs/Lzma2.d.ts +9 -3
- package/dist/cjs/sevenz/codecs/Lzma2.js +17 -198
- package/dist/cjs/sevenz/codecs/Lzma2.js.map +1 -1
- package/dist/cjs/sevenz/codecs/createBufferingDecoder.d.cts +2 -2
- package/dist/cjs/sevenz/codecs/createBufferingDecoder.d.ts +2 -2
- package/dist/cjs/sevenz/codecs/createBufferingDecoder.js +2 -15
- package/dist/cjs/sevenz/codecs/createBufferingDecoder.js.map +1 -1
- package/dist/cjs/types.d.cts +2 -16
- package/dist/cjs/types.d.ts +2 -16
- package/dist/cjs/types.js.map +1 -1
- package/dist/esm/FileEntry.d.ts +12 -4
- package/dist/esm/FileEntry.js +52 -26
- package/dist/esm/FileEntry.js.map +1 -1
- package/dist/esm/SevenZipIterator.d.ts +25 -2
- package/dist/esm/SevenZipIterator.js +69 -22
- package/dist/esm/SevenZipIterator.js.map +1 -1
- package/dist/esm/index.d.ts +1 -2
- package/dist/esm/index.js +2 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/streamToSource.d.ts +8 -11
- package/dist/esm/lib/streamToSource.js +22 -68
- package/dist/esm/lib/streamToSource.js.map +1 -1
- package/dist/esm/lzma/Lzma2ChunkParser.d.ts +73 -0
- package/dist/esm/lzma/Lzma2ChunkParser.js +137 -0
- package/dist/esm/lzma/Lzma2ChunkParser.js.map +1 -0
- package/dist/esm/lzma/index.d.ts +13 -0
- package/dist/esm/lzma/index.js +15 -0
- package/dist/esm/lzma/index.js.map +1 -0
- package/dist/esm/lzma/stream/transforms.d.ts +38 -0
- package/dist/esm/lzma/stream/transforms.js +150 -0
- package/dist/esm/lzma/stream/transforms.js.map +1 -0
- package/dist/esm/lzma/sync/Lzma2Decoder.d.ts +30 -0
- package/dist/esm/lzma/sync/Lzma2Decoder.js +115 -0
- package/dist/esm/lzma/sync/Lzma2Decoder.js.map +1 -0
- package/dist/esm/lzma/sync/LzmaDecoder.d.ts +82 -0
- package/dist/esm/lzma/sync/LzmaDecoder.js +403 -0
- package/dist/esm/lzma/sync/LzmaDecoder.js.map +1 -0
- package/dist/esm/lzma/sync/RangeDecoder.d.ts +69 -0
- package/dist/esm/lzma/sync/RangeDecoder.js +132 -0
- package/dist/esm/lzma/sync/RangeDecoder.js.map +1 -0
- package/dist/esm/lzma/types.d.ts +110 -0
- package/dist/esm/lzma/types.js +154 -0
- package/dist/esm/lzma/types.js.map +1 -0
- package/dist/esm/nextEntry.js +24 -26
- package/dist/esm/nextEntry.js.map +1 -1
- package/dist/esm/sevenz/ArchiveSource.d.ts +16 -0
- package/dist/esm/sevenz/ArchiveSource.js +70 -1
- package/dist/esm/sevenz/ArchiveSource.js.map +1 -1
- package/dist/esm/sevenz/FolderStreamSplitter.d.ts +101 -0
- package/dist/esm/sevenz/FolderStreamSplitter.js +207 -0
- package/dist/esm/sevenz/FolderStreamSplitter.js.map +1 -0
- package/dist/esm/sevenz/SevenZipParser.d.ts +71 -10
- package/dist/esm/sevenz/SevenZipParser.js +414 -198
- package/dist/esm/sevenz/SevenZipParser.js.map +1 -1
- package/dist/esm/sevenz/codecs/BZip2.js +2 -1
- package/dist/esm/sevenz/codecs/BZip2.js.map +1 -1
- package/dist/esm/sevenz/codecs/Bcj.d.ts +5 -4
- package/dist/esm/sevenz/codecs/Bcj.js +106 -6
- package/dist/esm/sevenz/codecs/Bcj.js.map +1 -1
- package/dist/esm/sevenz/codecs/BcjArm.d.ts +5 -4
- package/dist/esm/sevenz/codecs/BcjArm.js +55 -7
- package/dist/esm/sevenz/codecs/BcjArm.js.map +1 -1
- package/dist/esm/sevenz/codecs/Copy.d.ts +2 -4
- package/dist/esm/sevenz/codecs/Copy.js +1 -9
- package/dist/esm/sevenz/codecs/Copy.js.map +1 -1
- package/dist/esm/sevenz/codecs/Deflate.d.ts +6 -4
- package/dist/esm/sevenz/codecs/Deflate.js +9 -7
- package/dist/esm/sevenz/codecs/Deflate.js.map +1 -1
- package/dist/esm/sevenz/codecs/Delta.d.ts +5 -4
- package/dist/esm/sevenz/codecs/Delta.js +33 -8
- package/dist/esm/sevenz/codecs/Delta.js.map +1 -1
- package/dist/esm/sevenz/codecs/Lzma.d.ts +5 -2
- package/dist/esm/sevenz/codecs/Lzma.js +17 -24
- package/dist/esm/sevenz/codecs/Lzma.js.map +1 -1
- package/dist/esm/sevenz/codecs/Lzma2.d.ts +9 -3
- package/dist/esm/sevenz/codecs/Lzma2.js +15 -196
- package/dist/esm/sevenz/codecs/Lzma2.js.map +1 -1
- package/dist/esm/sevenz/codecs/createBufferingDecoder.d.ts +2 -2
- package/dist/esm/sevenz/codecs/createBufferingDecoder.js +1 -9
- package/dist/esm/sevenz/codecs/createBufferingDecoder.js.map +1 -1
- package/dist/esm/types.d.ts +2 -16
- package/dist/esm/types.js.map +1 -1
- package/package.json +3 -3
- package/assets/lzma-purejs/LICENSE +0 -11
- package/assets/lzma-purejs/index.js +0 -19
- package/assets/lzma-purejs/lib/LZ/OutWindow.js +0 -78
- package/assets/lzma-purejs/lib/LZ.js +0 -6
- package/assets/lzma-purejs/lib/LZMA/Base.js +0 -48
- package/assets/lzma-purejs/lib/LZMA/Decoder.js +0 -328
- package/assets/lzma-purejs/lib/LZMA.js +0 -6
- package/assets/lzma-purejs/lib/RangeCoder/BitTreeDecoder.js +0 -41
- package/assets/lzma-purejs/lib/RangeCoder/Decoder.js +0 -58
- package/assets/lzma-purejs/lib/RangeCoder/Encoder.js +0 -106
- package/assets/lzma-purejs/lib/RangeCoder.js +0 -10
- package/assets/lzma-purejs/lib/Stream.js +0 -41
- package/assets/lzma-purejs/lib/Util.js +0 -114
- package/assets/lzma-purejs/lib/makeBuffer.js +0 -25
- package/assets/lzma-purejs/package-lock.json +0 -13
- package/assets/lzma-purejs/package.json +0 -8
|
@@ -1,328 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
var Base = require('./Base');
|
|
3
|
-
var LZ = require('../LZ');
|
|
4
|
-
var RangeCoder = require('../RangeCoder');
|
|
5
|
-
|
|
6
|
-
var initBitModels = RangeCoder.Encoder.initBitModels;
|
|
7
|
-
|
|
8
|
-
var LenDecoder = function(){
|
|
9
|
-
this._choice = initBitModels(null, 2);
|
|
10
|
-
this._lowCoder = [];
|
|
11
|
-
this._midCoder = [];
|
|
12
|
-
this._highCoder = new RangeCoder.BitTreeDecoder(8);
|
|
13
|
-
this._numPosStates = 0;
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
LenDecoder.prototype.create = function(numPosStates){
|
|
17
|
-
for (; this._numPosStates < numPosStates; ++this._numPosStates){
|
|
18
|
-
this._lowCoder[this._numPosStates] = new RangeCoder.BitTreeDecoder(3);
|
|
19
|
-
this._midCoder[this._numPosStates] = new RangeCoder.BitTreeDecoder(3);
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
LenDecoder.prototype.init = function(){
|
|
24
|
-
initBitModels(this._choice);
|
|
25
|
-
for (var i = this._numPosStates - 1; i >= 0; i--){
|
|
26
|
-
this._lowCoder[i].init();
|
|
27
|
-
this._midCoder[i].init();
|
|
28
|
-
}
|
|
29
|
-
this._highCoder.init();
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
LenDecoder.prototype.decode = function(rangeDecoder, posState){
|
|
33
|
-
if (rangeDecoder.decodeBit(this._choice, 0) === 0){
|
|
34
|
-
return this._lowCoder[posState].decode(rangeDecoder);
|
|
35
|
-
}
|
|
36
|
-
if (rangeDecoder.decodeBit(this._choice, 1) === 0){
|
|
37
|
-
return 8 + this._midCoder[posState].decode(rangeDecoder);
|
|
38
|
-
}
|
|
39
|
-
return 16 + this._highCoder.decode(rangeDecoder);
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
var LiteralDecoder = function(){};
|
|
43
|
-
|
|
44
|
-
LiteralDecoder.Decoder2 = function(){
|
|
45
|
-
this._decoders = initBitModels(null, 0x300);
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
LiteralDecoder.Decoder2.prototype.init = function(){
|
|
49
|
-
initBitModels(this._decoders);
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
LiteralDecoder.Decoder2.prototype.decodeNormal = function(rangeDecoder){
|
|
53
|
-
var symbol = 1;
|
|
54
|
-
do {
|
|
55
|
-
symbol = (symbol << 1) | rangeDecoder.decodeBit(this._decoders, symbol);
|
|
56
|
-
} while(symbol < 0x100);
|
|
57
|
-
return symbol & 0xff;
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
LiteralDecoder.Decoder2.prototype.decodeWithMatchByte = function(rangeDecoder, matchByte){
|
|
61
|
-
var symbol = 1;
|
|
62
|
-
do {
|
|
63
|
-
var matchBit = (matchByte >> 7) & 1;
|
|
64
|
-
matchByte <<= 1;
|
|
65
|
-
var bit = rangeDecoder.decodeBit(this._decoders, ((1 + matchBit) << 8) + symbol);
|
|
66
|
-
symbol = (symbol << 1) | bit;
|
|
67
|
-
if (matchBit !== bit){
|
|
68
|
-
while(symbol < 0x100){
|
|
69
|
-
symbol = (symbol << 1) | rangeDecoder.decodeBit(this._decoders, symbol);
|
|
70
|
-
}
|
|
71
|
-
break;
|
|
72
|
-
}
|
|
73
|
-
} while(symbol < 0x100);
|
|
74
|
-
return symbol & 0xff;
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
LiteralDecoder.prototype.create = function(numPosBits, numPrevBits){
|
|
78
|
-
if (this._coders && this._numPrevBits === numPrevBits && this._numPosBits === numPosBits) return;
|
|
79
|
-
this._numPosBits = numPosBits;
|
|
80
|
-
this._posMask = (1 << numPosBits) - 1;
|
|
81
|
-
this._numPrevBits = numPrevBits;
|
|
82
|
-
// Lazy allocation: only create coders array, allocate individual coders on demand
|
|
83
|
-
// This saves significant memory for archives that don't use all coder slots
|
|
84
|
-
this._coders = [];
|
|
85
|
-
this._coderCount = 1 << (this._numPrevBits + this._numPosBits);
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
LiteralDecoder.prototype.init = function(){
|
|
89
|
-
// Only init coders that have been allocated (lazy allocation support)
|
|
90
|
-
for (var i = 0; i < this._coders.length; i++){
|
|
91
|
-
if (this._coders[i]) {
|
|
92
|
-
this._coders[i].init();
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
LiteralDecoder.prototype.getDecoder = function(pos, prevByte){
|
|
98
|
-
var index = ((pos & this._posMask) << this._numPrevBits) +
|
|
99
|
-
((prevByte & 0xff) >>> (8 - this._numPrevBits));
|
|
100
|
-
// Lazy allocation: create coder on first access
|
|
101
|
-
if (!this._coders[index]) {
|
|
102
|
-
this._coders[index] = new LiteralDecoder.Decoder2();
|
|
103
|
-
}
|
|
104
|
-
return this._coders[index];
|
|
105
|
-
};
|
|
106
|
-
|
|
107
|
-
var Decoder = function(){
|
|
108
|
-
this._outWindow = new LZ.OutWindow();
|
|
109
|
-
this._rangeDecoder = new RangeCoder.Decoder();
|
|
110
|
-
this._isMatchDecoders = initBitModels(null, Base.kNumStates << Base.kNumPosStatesBitsMax);
|
|
111
|
-
this._isRepDecoders = initBitModels(null, Base.kNumStates);
|
|
112
|
-
this._isRepG0Decoders = initBitModels(null, Base.kNumStates);
|
|
113
|
-
this._isRepG1Decoders = initBitModels(null, Base.kNumStates);
|
|
114
|
-
this._isRepG2Decoders = initBitModels(null, Base.kNumStates);
|
|
115
|
-
this._isRep0LongDecoders = initBitModels(null, Base.kNumStates << Base.kNumPosStatesBitsMax);
|
|
116
|
-
this._posSlotDecoder = [];
|
|
117
|
-
this._posDecoders = initBitModels(null, Base.kNumFullDistances - Base.kEndPosModelIndex);
|
|
118
|
-
this._posAlignDecoder = new RangeCoder.BitTreeDecoder(Base.kNumAlignBits);
|
|
119
|
-
this._lenDecoder = new LenDecoder();
|
|
120
|
-
this._repLenDecoder = new LenDecoder();
|
|
121
|
-
this._literalDecoder = new LiteralDecoder();
|
|
122
|
-
this._dictionarySize = -1;
|
|
123
|
-
this._dictionarySizeCheck = -1;
|
|
124
|
-
this._posStateMask = 0;
|
|
125
|
-
|
|
126
|
-
// LZMA2 state preservation
|
|
127
|
-
this._state = 0;
|
|
128
|
-
this._rep0 = 0;
|
|
129
|
-
this._rep1 = 0;
|
|
130
|
-
this._rep2 = 0;
|
|
131
|
-
this._rep3 = 0;
|
|
132
|
-
this._prevByte = 0;
|
|
133
|
-
this._nowPos64 = 0;
|
|
134
|
-
this._solid = false;
|
|
135
|
-
|
|
136
|
-
for (var i = 0; i < Base.kNumLenToPosStates; i++){
|
|
137
|
-
this._posSlotDecoder[i] = new RangeCoder.BitTreeDecoder(Base.kNumPosSlotBits);
|
|
138
|
-
}
|
|
139
|
-
};
|
|
140
|
-
|
|
141
|
-
Decoder.prototype.setSolid = function(solid) {
|
|
142
|
-
this._solid = solid;
|
|
143
|
-
};
|
|
144
|
-
|
|
145
|
-
Decoder.prototype.resetProbabilities = function() {
|
|
146
|
-
// Reset probability tables (same as init() but without dictionary/stream reset)
|
|
147
|
-
// Used for LZMA2 control bytes 0xa0-0xdf (state reset without dictionary reset)
|
|
148
|
-
initBitModels(this._isMatchDecoders);
|
|
149
|
-
initBitModels(this._isRepDecoders);
|
|
150
|
-
initBitModels(this._isRepG0Decoders);
|
|
151
|
-
initBitModels(this._isRepG1Decoders);
|
|
152
|
-
initBitModels(this._isRepG2Decoders);
|
|
153
|
-
initBitModels(this._isRep0LongDecoders);
|
|
154
|
-
initBitModels(this._posDecoders);
|
|
155
|
-
this._literalDecoder.init();
|
|
156
|
-
for (var i = this._posSlotDecoder.length - 1; i >= 0; i--) {
|
|
157
|
-
this._posSlotDecoder[i].init();
|
|
158
|
-
}
|
|
159
|
-
this._lenDecoder.init();
|
|
160
|
-
this._repLenDecoder.init();
|
|
161
|
-
this._posAlignDecoder.init();
|
|
162
|
-
// Reset state variables
|
|
163
|
-
this._state = 0;
|
|
164
|
-
this._rep0 = 0;
|
|
165
|
-
this._rep1 = 0;
|
|
166
|
-
this._rep2 = 0;
|
|
167
|
-
this._rep3 = 0;
|
|
168
|
-
// DO NOT reset _nowPos64, _prevByte, or dictionary
|
|
169
|
-
};
|
|
170
|
-
|
|
171
|
-
Decoder.prototype.setDictionarySize = function(dictionarySize){
|
|
172
|
-
if (dictionarySize < 0) return false;
|
|
173
|
-
if (this._dictionarySize !== dictionarySize){
|
|
174
|
-
this._dictionarySize = dictionarySize;
|
|
175
|
-
this._dictionarySizeCheck = Math.max(this._dictionarySize, 1);
|
|
176
|
-
this._outWindow.create(Math.max(this._dictionarySizeCheck, (1 << 12)));
|
|
177
|
-
}
|
|
178
|
-
return true;
|
|
179
|
-
};
|
|
180
|
-
|
|
181
|
-
Decoder.prototype.setLcLpPb = function(lc, lp, pb){
|
|
182
|
-
if (lc > Base.kNumLitContextBitsMax || lp > 4 || pb > Base.kNumPosStatesBitsMax) return false;
|
|
183
|
-
var numPosStates = 1 << pb;
|
|
184
|
-
this._literalDecoder.create(lp, lc);
|
|
185
|
-
this._lenDecoder.create(numPosStates);
|
|
186
|
-
this._repLenDecoder.create(numPosStates);
|
|
187
|
-
this._posStateMask = numPosStates - 1;
|
|
188
|
-
return true;
|
|
189
|
-
};
|
|
190
|
-
|
|
191
|
-
Decoder.prototype.init = function(){
|
|
192
|
-
this._outWindow.init(false);
|
|
193
|
-
initBitModels(this._isMatchDecoders);
|
|
194
|
-
initBitModels(this._isRepDecoders);
|
|
195
|
-
initBitModels(this._isRepG0Decoders);
|
|
196
|
-
initBitModels(this._isRepG1Decoders);
|
|
197
|
-
initBitModels(this._isRepG2Decoders);
|
|
198
|
-
initBitModels(this._isRep0LongDecoders);
|
|
199
|
-
initBitModels(this._posDecoders);
|
|
200
|
-
this._literalDecoder.init();
|
|
201
|
-
for (var i = Base.kNumLenToPosStates - 1; i >= 0; i--){
|
|
202
|
-
this._posSlotDecoder[i].init();
|
|
203
|
-
}
|
|
204
|
-
this._lenDecoder.init();
|
|
205
|
-
this._repLenDecoder.init();
|
|
206
|
-
this._posAlignDecoder.init();
|
|
207
|
-
this._rangeDecoder.init();
|
|
208
|
-
};
|
|
209
|
-
|
|
210
|
-
Decoder.prototype.code = function(inStream, outStream, outSize){
|
|
211
|
-
var chunkPos = 0, posState, decoder2, len, distance, posSlot, numDirectBits;
|
|
212
|
-
this._rangeDecoder.setStream(inStream);
|
|
213
|
-
this._outWindow.setStream(outStream);
|
|
214
|
-
|
|
215
|
-
if (!this._solid) {
|
|
216
|
-
this.init();
|
|
217
|
-
this._state = Base.stateInit();
|
|
218
|
-
this._rep0 = 0;
|
|
219
|
-
this._rep1 = 0;
|
|
220
|
-
this._rep2 = 0;
|
|
221
|
-
this._rep3 = 0;
|
|
222
|
-
this._prevByte = 0;
|
|
223
|
-
this._nowPos64 = 0;
|
|
224
|
-
} else {
|
|
225
|
-
this._outWindow.init(true);
|
|
226
|
-
this._rangeDecoder.init();
|
|
227
|
-
}
|
|
228
|
-
var cumPos = this._nowPos64;
|
|
229
|
-
|
|
230
|
-
while(outSize < 0 || chunkPos < outSize){
|
|
231
|
-
posState = cumPos & this._posStateMask;
|
|
232
|
-
if (this._rangeDecoder.decodeBit(this._isMatchDecoders, (this._state << Base.kNumPosStatesBitsMax) + posState) === 0){
|
|
233
|
-
decoder2 = this._literalDecoder.getDecoder(cumPos, this._prevByte);
|
|
234
|
-
if (!Base.stateIsCharState(this._state)){
|
|
235
|
-
this._prevByte = decoder2.decodeWithMatchByte(this._rangeDecoder, this._outWindow.getByte(this._rep0));
|
|
236
|
-
} else {
|
|
237
|
-
this._prevByte = decoder2.decodeNormal(this._rangeDecoder);
|
|
238
|
-
}
|
|
239
|
-
this._outWindow.putByte(this._prevByte);
|
|
240
|
-
this._state = Base.stateUpdateChar(this._state);
|
|
241
|
-
chunkPos++; cumPos++;
|
|
242
|
-
} else {
|
|
243
|
-
if (this._rangeDecoder.decodeBit(this._isRepDecoders, this._state) === 1){
|
|
244
|
-
len = 0;
|
|
245
|
-
if (this._rangeDecoder.decodeBit(this._isRepG0Decoders, this._state) === 0){
|
|
246
|
-
if (this._rangeDecoder.decodeBit(this._isRep0LongDecoders, (this._state << Base.kNumPosStatesBitsMax) + posState) === 0){
|
|
247
|
-
this._state = Base.stateUpdateShortRep(this._state);
|
|
248
|
-
len = 1;
|
|
249
|
-
}
|
|
250
|
-
} else {
|
|
251
|
-
if (this._rangeDecoder.decodeBit(this._isRepG1Decoders, this._state) === 0){
|
|
252
|
-
distance = this._rep1;
|
|
253
|
-
} else {
|
|
254
|
-
if (this._rangeDecoder.decodeBit(this._isRepG2Decoders, this._state) === 0){
|
|
255
|
-
distance = this._rep2;
|
|
256
|
-
} else {
|
|
257
|
-
distance = this._rep3;
|
|
258
|
-
this._rep3 = this._rep2;
|
|
259
|
-
}
|
|
260
|
-
this._rep2 = this._rep1;
|
|
261
|
-
}
|
|
262
|
-
this._rep1 = this._rep0;
|
|
263
|
-
this._rep0 = distance;
|
|
264
|
-
}
|
|
265
|
-
if (len === 0){
|
|
266
|
-
len = Base.kMatchMinLen + this._repLenDecoder.decode(this._rangeDecoder, posState);
|
|
267
|
-
this._state = Base.stateUpdateRep(this._state);
|
|
268
|
-
}
|
|
269
|
-
} else {
|
|
270
|
-
this._rep3 = this._rep2;
|
|
271
|
-
this._rep2 = this._rep1;
|
|
272
|
-
this._rep1 = this._rep0;
|
|
273
|
-
len = Base.kMatchMinLen + this._lenDecoder.decode(this._rangeDecoder, posState);
|
|
274
|
-
this._state = Base.stateUpdateMatch(this._state);
|
|
275
|
-
posSlot = this._posSlotDecoder[Base.getLenToPosState(len)].decode(this._rangeDecoder);
|
|
276
|
-
if (posSlot >= Base.kStartPosModelIndex){
|
|
277
|
-
numDirectBits = (posSlot >> 1) - 1;
|
|
278
|
-
this._rep0 = (2 | (posSlot & 1)) << numDirectBits;
|
|
279
|
-
if (posSlot < Base.kEndPosModelIndex){
|
|
280
|
-
this._rep0 += RangeCoder.BitTreeDecoder.reverseDecode(this._posDecoders,
|
|
281
|
-
this._rep0 - posSlot - 1, this._rangeDecoder, numDirectBits);
|
|
282
|
-
} else {
|
|
283
|
-
this._rep0 += this._rangeDecoder.decodeDirectBits(numDirectBits - Base.kNumAlignBits) << Base.kNumAlignBits;
|
|
284
|
-
this._rep0 += this._posAlignDecoder.reverseDecode(this._rangeDecoder);
|
|
285
|
-
if (this._rep0 < 0){
|
|
286
|
-
if (this._rep0 === -1) break;
|
|
287
|
-
return false;
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
} else {
|
|
291
|
-
this._rep0 = posSlot;
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
if (this._rep0 >= cumPos || this._rep0 >= this._dictionarySizeCheck) return false;
|
|
295
|
-
this._outWindow.copyBlock(this._rep0, len);
|
|
296
|
-
chunkPos += len; cumPos += len;
|
|
297
|
-
this._prevByte = this._outWindow.getByte(0);
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
this._nowPos64 = cumPos;
|
|
301
|
-
this._outWindow.flush();
|
|
302
|
-
this._outWindow.releaseStream();
|
|
303
|
-
this._rangeDecoder.releaseStream();
|
|
304
|
-
return true;
|
|
305
|
-
};
|
|
306
|
-
|
|
307
|
-
Decoder.prototype.setDecoderProperties = function(properties){
|
|
308
|
-
if (properties.length < 5) return false;
|
|
309
|
-
var value = properties[0] & 0xFF;
|
|
310
|
-
var lc = value % 9;
|
|
311
|
-
value = ~~(value / 9);
|
|
312
|
-
var lp = value % 5;
|
|
313
|
-
var pb = ~~(value / 5);
|
|
314
|
-
if (!this.setLcLpPb(lc, lp, pb)) return false;
|
|
315
|
-
var dictionarySize = 0;
|
|
316
|
-
for (var i = 0, shift = 1; i < 4; i++, shift *= 256){
|
|
317
|
-
dictionarySize += (properties[1+i] & 0xFF) * shift;
|
|
318
|
-
}
|
|
319
|
-
return this.setDictionarySize(dictionarySize);
|
|
320
|
-
};
|
|
321
|
-
|
|
322
|
-
Decoder.prototype.setDecoderPropertiesFromStream = function(stream) {
|
|
323
|
-
var buffer = [];
|
|
324
|
-
for (var i = 0; i < 5; i++) { buffer[i] = stream.readByte(); }
|
|
325
|
-
return this.setDecoderProperties(buffer);
|
|
326
|
-
};
|
|
327
|
-
|
|
328
|
-
module.exports = Decoder;
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
var Encoder = require('./Encoder');
|
|
3
|
-
|
|
4
|
-
var BitTreeDecoder = function(numBitLevels){
|
|
5
|
-
this._numBitLevels = numBitLevels;
|
|
6
|
-
this.init();
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
BitTreeDecoder.prototype.init = function(){
|
|
10
|
-
this._models = Encoder.initBitModels(null, 1 << this._numBitLevels);
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
BitTreeDecoder.prototype.decode = function(rangeDecoder){
|
|
14
|
-
var m = 1;
|
|
15
|
-
for (var i = this._numBitLevels; i > 0; i--){
|
|
16
|
-
m = (m << 1) | rangeDecoder.decodeBit(this._models, m);
|
|
17
|
-
}
|
|
18
|
-
return m - (1 << this._numBitLevels);
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
BitTreeDecoder.prototype.reverseDecode = function(rangeDecoder){
|
|
22
|
-
var m = 1, symbol = 0;
|
|
23
|
-
for (var i = 0; i < this._numBitLevels; i++){
|
|
24
|
-
var bit = rangeDecoder.decodeBit(this._models, m);
|
|
25
|
-
m = (m << 1) | bit;
|
|
26
|
-
symbol |= (bit << i);
|
|
27
|
-
}
|
|
28
|
-
return symbol;
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
BitTreeDecoder.reverseDecode = function(models, startIndex, rangeDecoder, numBitLevels) {
|
|
32
|
-
var m = 1, symbol = 0;
|
|
33
|
-
for (var i = 0; i < numBitLevels; i++){
|
|
34
|
-
var bit = rangeDecoder.decodeBit(models, startIndex + m);
|
|
35
|
-
m = (m << 1) | bit;
|
|
36
|
-
symbol |= (bit << i);
|
|
37
|
-
}
|
|
38
|
-
return symbol;
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
module.exports = BitTreeDecoder;
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var Decoder = function(stream){
|
|
4
|
-
if (stream) {
|
|
5
|
-
this.setStream(stream);
|
|
6
|
-
this.init();
|
|
7
|
-
}
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
Decoder.prototype.setStream = function(stream){ this._stream = stream; };
|
|
11
|
-
Decoder.prototype.releaseStream = function(){ this._stream = null; };
|
|
12
|
-
|
|
13
|
-
Decoder.prototype.init = function(){
|
|
14
|
-
this._code = 0;
|
|
15
|
-
this._range = -1;
|
|
16
|
-
for (var i = 0; i < 5; i++){
|
|
17
|
-
this._code = (this._code << 8) | this._stream.readByte();
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
Decoder.prototype.decodeDirectBits = function(numTotalBits){
|
|
22
|
-
var result = 0;
|
|
23
|
-
for (var i = numTotalBits; i > 0; i--){
|
|
24
|
-
this._range >>>= 1;
|
|
25
|
-
var t = (this._code - this._range) >>> 31;
|
|
26
|
-
this._code -= this._range & (t - 1);
|
|
27
|
-
result = (result << 1) | (1 - t);
|
|
28
|
-
if ((this._range & 0xff000000) === 0){
|
|
29
|
-
this._code = (this._code << 8) | this._stream.readByte();
|
|
30
|
-
this._range <<= 8;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
return result;
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
Decoder.prototype.decodeBit = function(probs, index){
|
|
37
|
-
var prob = probs[index];
|
|
38
|
-
var newBound = (this._range >>> 11) * prob;
|
|
39
|
-
if ((this._code ^ 0x80000000) < (newBound ^ 0x80000000)){
|
|
40
|
-
this._range = newBound;
|
|
41
|
-
probs[index] += (2048 - prob) >>> 5;
|
|
42
|
-
if ((this._range & 0xff000000) === 0){
|
|
43
|
-
this._code = (this._code << 8) | this._stream.readByte();
|
|
44
|
-
this._range <<= 8;
|
|
45
|
-
}
|
|
46
|
-
return 0;
|
|
47
|
-
}
|
|
48
|
-
this._range -= newBound;
|
|
49
|
-
this._code -= newBound;
|
|
50
|
-
probs[index] -= prob >>> 5;
|
|
51
|
-
if ((this._range & 0xff000000) === 0){
|
|
52
|
-
this._code = (this._code << 8) | this._stream.readByte();
|
|
53
|
-
this._range <<= 8;
|
|
54
|
-
}
|
|
55
|
-
return 1;
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
module.exports = Decoder;
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var MAX32 = 0xFFFFFFFF;
|
|
4
|
-
var MAX24 = 0x00FFFFFF;
|
|
5
|
-
var MAX8 = 0x000000FF;
|
|
6
|
-
var MASK24= 0xFF000000;
|
|
7
|
-
|
|
8
|
-
var kNumBitModelTotalBits = 11;
|
|
9
|
-
var kBitModelTotal = (1 << kNumBitModelTotalBits);
|
|
10
|
-
var kNumMoveBits = 5;
|
|
11
|
-
var kNumMoveReducingBits = 2;
|
|
12
|
-
var kNumBitPriceShiftBits = 6;
|
|
13
|
-
|
|
14
|
-
var Encoder = function(stream){
|
|
15
|
-
this.init();
|
|
16
|
-
if (stream) { this.setStream(stream); }
|
|
17
|
-
};
|
|
18
|
-
Encoder.prototype.setStream = function(stream) { this._stream = stream; };
|
|
19
|
-
Encoder.prototype.releaseStream = function() { this._stream = null; };
|
|
20
|
-
Encoder.prototype.init = function() {
|
|
21
|
-
this._position = 0;
|
|
22
|
-
this.low = 0;
|
|
23
|
-
this.range = MAX32;
|
|
24
|
-
this._cacheSize = 1;
|
|
25
|
-
this._cache = 0;
|
|
26
|
-
};
|
|
27
|
-
Encoder.prototype.flushData = function() {
|
|
28
|
-
for (var i=0; i<5; i++) { this.shiftLow(); }
|
|
29
|
-
};
|
|
30
|
-
Encoder.prototype.flushStream = function() {
|
|
31
|
-
if (this._stream.flush) { this._stream.flush(); }
|
|
32
|
-
};
|
|
33
|
-
Encoder.prototype.shiftLow = function() {
|
|
34
|
-
var overflow = (this.low > MAX32) ? 1 : 0;
|
|
35
|
-
if (this.low < MASK24 || overflow) {
|
|
36
|
-
this._position += this._cacheSize;
|
|
37
|
-
var temp = this._cache;
|
|
38
|
-
do {
|
|
39
|
-
this._stream.writeByte((temp + overflow) & MAX8);
|
|
40
|
-
temp = MAX8;
|
|
41
|
-
} while (--this._cacheSize !== 0);
|
|
42
|
-
this._cache = this.low >>> 24;
|
|
43
|
-
}
|
|
44
|
-
this._cacheSize++;
|
|
45
|
-
this.low = (this.low & MAX24) * 256;
|
|
46
|
-
};
|
|
47
|
-
Encoder.prototype.encodeDirectBits = function(v, numTotalBits) {
|
|
48
|
-
var mask = 1 << (numTotalBits-1);
|
|
49
|
-
for (var i = numTotalBits - 1; i >= 0; i--, mask>>>=1) {
|
|
50
|
-
this.range >>>= 1;
|
|
51
|
-
if (v & mask) { this.low += this.range; }
|
|
52
|
-
if (this.range <= MAX24) {
|
|
53
|
-
this.range *= 256;
|
|
54
|
-
this.shiftLow();
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
Encoder.prototype.getProcessedSizeAdd = function() {
|
|
59
|
-
return this._cacheSize + this._position + 4;
|
|
60
|
-
};
|
|
61
|
-
Encoder.initBitModels = function(probs, len) {
|
|
62
|
-
if (len && !probs) {
|
|
63
|
-
probs = typeof(Uint16Array)!=='undefined' ? new Uint16Array(len) : new Array(len);
|
|
64
|
-
}
|
|
65
|
-
for (var i=0; i < probs.length; i++) { probs[i] = (kBitModelTotal >>> 1); }
|
|
66
|
-
return probs;
|
|
67
|
-
};
|
|
68
|
-
Encoder.prototype.encode = function(probs, index, symbol) {
|
|
69
|
-
var prob = probs[index];
|
|
70
|
-
var newBound = (this.range >>> kNumBitModelTotalBits) * prob;
|
|
71
|
-
if (symbol === 0) {
|
|
72
|
-
this.range = newBound;
|
|
73
|
-
probs[index] = prob + ((kBitModelTotal - prob) >>> kNumMoveBits);
|
|
74
|
-
} else {
|
|
75
|
-
this.low += newBound;
|
|
76
|
-
this.range -= newBound;
|
|
77
|
-
probs[index] = prob - (prob >>> kNumMoveBits);
|
|
78
|
-
}
|
|
79
|
-
if (this.range <= MAX24) {
|
|
80
|
-
this.range *= 256;
|
|
81
|
-
this.shiftLow();
|
|
82
|
-
}
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
var ProbPrices = typeof(Uint32Array)!=='undefined' ?
|
|
86
|
-
new Uint32Array(kBitModelTotal >>> kNumMoveReducingBits) : [];
|
|
87
|
-
(function() {
|
|
88
|
-
var kNumBits = (kNumBitModelTotalBits - kNumMoveReducingBits);
|
|
89
|
-
for (var i = kNumBits - 1; i >= 0; i--) {
|
|
90
|
-
var start = 1 << (kNumBits - i - 1);
|
|
91
|
-
var end = 1 << (kNumBits - i);
|
|
92
|
-
for (var j = start; j < end; j++) {
|
|
93
|
-
ProbPrices[j] = (i << kNumBitPriceShiftBits) +
|
|
94
|
-
(((end - j) << kNumBitPriceShiftBits) >>> (kNumBits - i - 1));
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
})();
|
|
98
|
-
|
|
99
|
-
Encoder.getPrice = function(prob, symbol) {
|
|
100
|
-
return ProbPrices[(((prob - symbol) ^ ((-symbol))) & (kBitModelTotal - 1)) >>> kNumMoveReducingBits];
|
|
101
|
-
};
|
|
102
|
-
Encoder.getPrice0 = function(prob) { return ProbPrices[prob >>> kNumMoveReducingBits]; };
|
|
103
|
-
Encoder.getPrice1 = function(prob) { return ProbPrices[(kBitModelTotal - prob) >>> kNumMoveReducingBits]; };
|
|
104
|
-
Encoder.kNumBitPriceShiftBits = kNumBitPriceShiftBits;
|
|
105
|
-
|
|
106
|
-
module.exports = Encoder;
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
var BitTreeDecoder = require('./RangeCoder/BitTreeDecoder');
|
|
3
|
-
var Decoder = require('./RangeCoder/Decoder');
|
|
4
|
-
var Encoder = require('./RangeCoder/Encoder');
|
|
5
|
-
|
|
6
|
-
module.exports = {
|
|
7
|
-
BitTreeDecoder: BitTreeDecoder,
|
|
8
|
-
Decoder: Decoder,
|
|
9
|
-
Encoder: Encoder
|
|
10
|
-
};
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
/* very simple input/output stream interface */
|
|
4
|
-
var Stream = function() {
|
|
5
|
-
};
|
|
6
|
-
|
|
7
|
-
// input streams //////////////
|
|
8
|
-
Stream.prototype.readByte = function() {
|
|
9
|
-
throw new Error("abstract method readByte() not implemented");
|
|
10
|
-
};
|
|
11
|
-
Stream.prototype.read = function(buffer, bufOffset, length) {
|
|
12
|
-
var bytesRead = 0;
|
|
13
|
-
while (bytesRead < length) {
|
|
14
|
-
var c = this.readByte();
|
|
15
|
-
if (c < 0) {
|
|
16
|
-
return (bytesRead===0) ? -1 : bytesRead;
|
|
17
|
-
}
|
|
18
|
-
buffer[bufOffset++] = c;
|
|
19
|
-
bytesRead++;
|
|
20
|
-
}
|
|
21
|
-
return bytesRead;
|
|
22
|
-
};
|
|
23
|
-
Stream.prototype.seek = function(new_pos) {
|
|
24
|
-
throw new Error("abstract method seek() not implemented");
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
// output streams ///////////
|
|
28
|
-
Stream.prototype.writeByte = function(_byte) {
|
|
29
|
-
throw new Error("abstract method writeByte() not implemented");
|
|
30
|
-
};
|
|
31
|
-
Stream.prototype.write = function(buffer, bufOffset, length) {
|
|
32
|
-
var i;
|
|
33
|
-
for (i=0; i<length; i++) {
|
|
34
|
-
this.writeByte(buffer[bufOffset++]);
|
|
35
|
-
}
|
|
36
|
-
return length;
|
|
37
|
-
};
|
|
38
|
-
Stream.prototype.flush = function() {
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
module.exports = Stream;
|