@gmod/cram 3.0.7 → 4.0.1
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/craiIndex.js +70 -87
- package/dist/craiIndex.js.map +1 -1
- package/dist/cram-bundle.js +1 -1
- package/dist/cram-bundle.js.LICENSE.txt +0 -9
- package/dist/cramFile/codecs/_base.d.ts +1 -1
- package/dist/cramFile/codecs/beta.d.ts +2 -2
- package/dist/cramFile/codecs/beta.js +1 -1
- package/dist/cramFile/codecs/beta.js.map +1 -1
- package/dist/cramFile/codecs/byteArrayLength.d.ts +2 -2
- package/dist/cramFile/codecs/byteArrayStop.d.ts +4 -4
- package/dist/cramFile/codecs/byteArrayStop.js +1 -1
- package/dist/cramFile/codecs/byteArrayStop.js.map +1 -1
- package/dist/cramFile/codecs/external.d.ts +1 -1
- package/dist/cramFile/codecs/external.js +1 -1
- package/dist/cramFile/codecs/external.js.map +1 -1
- package/dist/cramFile/codecs/gamma.d.ts +1 -1
- package/dist/cramFile/codecs/gamma.js +1 -1
- package/dist/cramFile/codecs/gamma.js.map +1 -1
- package/dist/cramFile/codecs/getBits.d.ts +1 -1
- package/dist/cramFile/codecs/getBits.js.map +1 -1
- package/dist/cramFile/codecs/huffman.d.ts +1 -1
- package/dist/cramFile/codecs/huffman.js +1 -1
- package/dist/cramFile/codecs/huffman.js.map +1 -1
- package/dist/cramFile/codecs/index.d.ts +1 -1
- package/dist/cramFile/codecs/index.js +5 -5
- package/dist/cramFile/codecs/index.js.map +1 -1
- package/dist/cramFile/codecs/subexp.d.ts +2 -2
- package/dist/cramFile/codecs/subexp.js +1 -1
- package/dist/cramFile/codecs/subexp.js.map +1 -1
- package/dist/cramFile/container/compressionScheme.d.ts +2 -2
- package/dist/cramFile/container/compressionScheme.js +1 -1
- package/dist/cramFile/container/compressionScheme.js.map +1 -1
- package/dist/cramFile/container/index.d.ts +1 -2
- package/dist/cramFile/container/index.js +62 -79
- package/dist/cramFile/container/index.js.map +1 -1
- package/dist/cramFile/file.d.ts +9 -13
- package/dist/cramFile/file.js +218 -247
- package/dist/cramFile/file.js.map +1 -1
- package/dist/cramFile/record.js +2 -2
- package/dist/cramFile/record.js.map +1 -1
- package/dist/cramFile/sectionParsers.d.ts +16 -16
- package/dist/cramFile/sectionParsers.js +12 -9
- package/dist/cramFile/sectionParsers.js.map +1 -1
- package/dist/cramFile/slice/decodeRecord.d.ts +3 -3
- package/dist/cramFile/slice/decodeRecord.js +11 -11
- package/dist/cramFile/slice/decodeRecord.js.map +1 -1
- package/dist/cramFile/slice/index.d.ts +2 -2
- package/dist/cramFile/slice/index.js +241 -262
- package/dist/cramFile/slice/index.js.map +1 -1
- package/dist/cramFile/util.d.ts +4 -2
- package/dist/cramFile/util.js +29 -6
- package/dist/cramFile/util.js.map +1 -1
- package/dist/htscodecs/arith_gen.d.ts +9 -17
- package/dist/htscodecs/arith_gen.js +32 -272
- package/dist/htscodecs/arith_gen.js.map +1 -1
- package/dist/htscodecs/fqzcomp.d.ts +1 -2
- package/dist/htscodecs/fqzcomp.js +2 -421
- package/dist/htscodecs/fqzcomp.js.map +1 -1
- package/dist/htscodecs/index.d.ts +5 -5
- package/dist/htscodecs/index.js +10 -10
- package/dist/htscodecs/index.js.map +1 -1
- package/dist/htscodecs/iostream.d.ts +2 -1
- package/dist/htscodecs/iostream.js +3 -2
- package/dist/htscodecs/iostream.js.map +1 -1
- package/dist/htscodecs/rans.d.ts +1 -2
- package/dist/htscodecs/rans.js +3 -270
- package/dist/htscodecs/rans.js.map +1 -1
- package/dist/htscodecs/rans4x16.d.ts +0 -1
- package/dist/htscodecs/rans4x16.js +6 -497
- package/dist/htscodecs/rans4x16.js.map +1 -1
- package/dist/htscodecs/tok3.js +17 -1
- package/dist/htscodecs/tok3.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/indexedCramFile.d.ts +4 -4
- package/dist/indexedCramFile.js +97 -108
- package/dist/indexedCramFile.js.map +1 -1
- package/dist/io/index.d.ts +3 -3
- package/dist/io/index.js +6 -6
- package/dist/io/index.js.map +1 -1
- package/dist/rans/constants.d.ts +1 -1
- package/dist/rans/constants.js +1 -1
- package/dist/rans/constants.js.map +1 -1
- package/dist/rans/d04.js.map +1 -1
- package/dist/rans/decoding.js.map +1 -1
- package/dist/rans/frequencies.js.map +1 -1
- package/dist/rans/index.js +5 -5
- package/dist/rans/index.js.map +1 -1
- package/dist/unzip.d.ts +1 -1
- package/dist/unzip.js +5 -3
- package/dist/unzip.js.map +1 -1
- package/esm/craiIndex.js +10 -12
- package/esm/craiIndex.js.map +1 -1
- package/esm/cramFile/codecs/_base.d.ts +1 -1
- package/esm/cramFile/codecs/beta.d.ts +2 -2
- package/esm/cramFile/codecs/beta.js +1 -1
- package/esm/cramFile/codecs/beta.js.map +1 -1
- package/esm/cramFile/codecs/byteArrayLength.d.ts +2 -2
- package/esm/cramFile/codecs/byteArrayStop.d.ts +4 -4
- package/esm/cramFile/codecs/byteArrayStop.js +1 -1
- package/esm/cramFile/codecs/byteArrayStop.js.map +1 -1
- package/esm/cramFile/codecs/external.d.ts +1 -1
- package/esm/cramFile/codecs/external.js +1 -1
- package/esm/cramFile/codecs/external.js.map +1 -1
- package/esm/cramFile/codecs/gamma.d.ts +1 -1
- package/esm/cramFile/codecs/gamma.js +1 -1
- package/esm/cramFile/codecs/gamma.js.map +1 -1
- package/esm/cramFile/codecs/getBits.d.ts +1 -1
- package/esm/cramFile/codecs/getBits.js.map +1 -1
- package/esm/cramFile/codecs/huffman.d.ts +1 -1
- package/esm/cramFile/codecs/huffman.js +1 -1
- package/esm/cramFile/codecs/huffman.js.map +1 -1
- package/esm/cramFile/codecs/index.d.ts +1 -1
- package/esm/cramFile/codecs/index.js +5 -5
- package/esm/cramFile/codecs/index.js.map +1 -1
- package/esm/cramFile/codecs/subexp.d.ts +2 -2
- package/esm/cramFile/codecs/subexp.js +1 -1
- package/esm/cramFile/codecs/subexp.js.map +1 -1
- package/esm/cramFile/container/compressionScheme.d.ts +2 -2
- package/esm/cramFile/container/compressionScheme.js +1 -1
- package/esm/cramFile/container/compressionScheme.js.map +1 -1
- package/esm/cramFile/container/index.d.ts +1 -2
- package/esm/cramFile/container/index.js +4 -7
- package/esm/cramFile/container/index.js.map +1 -1
- package/esm/cramFile/file.d.ts +9 -13
- package/esm/cramFile/file.js +47 -52
- package/esm/cramFile/file.js.map +1 -1
- package/esm/cramFile/record.js +2 -2
- package/esm/cramFile/record.js.map +1 -1
- package/esm/cramFile/sectionParsers.d.ts +16 -16
- package/esm/cramFile/sectionParsers.js +7 -7
- package/esm/cramFile/sectionParsers.js.map +1 -1
- package/esm/cramFile/slice/decodeRecord.d.ts +3 -3
- package/esm/cramFile/slice/decodeRecord.js +11 -11
- package/esm/cramFile/slice/decodeRecord.js.map +1 -1
- package/esm/cramFile/slice/index.d.ts +2 -2
- package/esm/cramFile/slice/index.js +7 -6
- package/esm/cramFile/slice/index.js.map +1 -1
- package/esm/cramFile/util.d.ts +4 -2
- package/esm/cramFile/util.js +19 -2
- package/esm/cramFile/util.js.map +1 -1
- package/esm/htscodecs/arith_gen.d.ts +9 -17
- package/esm/htscodecs/arith_gen.js +32 -272
- package/esm/htscodecs/arith_gen.js.map +1 -1
- package/esm/htscodecs/fqzcomp.d.ts +1 -2
- package/esm/htscodecs/fqzcomp.js +2 -421
- package/esm/htscodecs/fqzcomp.js.map +1 -1
- package/esm/htscodecs/index.d.ts +5 -5
- package/esm/htscodecs/index.js +10 -10
- package/esm/htscodecs/index.js.map +1 -1
- package/esm/htscodecs/iostream.d.ts +2 -1
- package/esm/htscodecs/iostream.js +3 -2
- package/esm/htscodecs/iostream.js.map +1 -1
- package/esm/htscodecs/rans.d.ts +1 -2
- package/esm/htscodecs/rans.js +3 -270
- package/esm/htscodecs/rans.js.map +1 -1
- package/esm/htscodecs/rans4x16.d.ts +0 -1
- package/esm/htscodecs/rans4x16.js +6 -497
- package/esm/htscodecs/rans4x16.js.map +1 -1
- package/esm/htscodecs/tok3.js +17 -1
- package/esm/htscodecs/tok3.js.map +1 -1
- package/esm/index.d.ts +1 -1
- package/esm/index.js +1 -1
- package/esm/index.js.map +1 -1
- package/esm/indexedCramFile.d.ts +4 -4
- package/esm/indexedCramFile.js +10 -10
- package/esm/indexedCramFile.js.map +1 -1
- package/esm/io/index.d.ts +3 -3
- package/esm/io/index.js +2 -2
- package/esm/io/index.js.map +1 -1
- package/esm/rans/constants.d.ts +1 -1
- package/esm/rans/constants.js +1 -1
- package/esm/rans/constants.js.map +1 -1
- package/esm/rans/d04.js.map +1 -1
- package/esm/rans/decoding.js.map +1 -1
- package/esm/rans/frequencies.js.map +1 -1
- package/esm/rans/index.js +5 -5
- package/esm/rans/index.js.map +1 -1
- package/esm/unzip.d.ts +1 -1
- package/esm/unzip.js +4 -1
- package/esm/unzip.js.map +1 -1
- package/package.json +7 -9
- package/src/craiIndex.ts +17 -16
- package/src/cramFile/codecs/_base.ts +1 -1
- package/src/cramFile/codecs/beta.ts +3 -3
- package/src/cramFile/codecs/byteArrayLength.ts +1 -1
- package/src/cramFile/codecs/byteArrayStop.ts +3 -4
- package/src/cramFile/codecs/external.ts +3 -3
- package/src/cramFile/codecs/gamma.ts +2 -2
- package/src/cramFile/codecs/getBits.ts +1 -1
- package/src/cramFile/codecs/huffman.ts +2 -3
- package/src/cramFile/codecs/index.ts +7 -8
- package/src/cramFile/codecs/subexp.ts +3 -3
- package/src/cramFile/container/compressionScheme.ts +3 -3
- package/src/cramFile/container/index.ts +7 -10
- package/src/cramFile/file.ts +71 -77
- package/src/cramFile/record.ts +3 -3
- package/src/cramFile/sectionParsers.ts +27 -22
- package/src/cramFile/slice/decodeRecord.ts +17 -17
- package/src/cramFile/slice/index.ts +8 -9
- package/src/cramFile/util.ts +24 -5
- package/src/htscodecs/arith_gen.js +33 -296
- package/src/htscodecs/fqzcomp.js +2 -476
- package/src/htscodecs/index.js +9 -11
- package/src/htscodecs/iostream.js +3 -2
- package/src/htscodecs/rans.js +3 -315
- package/src/htscodecs/rans4x16.js +6 -557
- package/src/htscodecs/tok3.js +18 -1
- package/src/index.ts +1 -1
- package/src/indexedCramFile.ts +6 -5
- package/src/io/index.ts +6 -5
- package/src/rans/constants.ts +1 -1
- package/src/rans/d04.ts +0 -1
- package/src/rans/decoding.ts +0 -1
- package/src/rans/frequencies.ts +0 -1
- package/src/rans/index.ts +5 -7
- package/src/unzip.ts +5 -1
- package/dist/cramFile/filehandle.d.ts +0 -1
- package/dist/cramFile/filehandle.js +0 -3
- package/dist/cramFile/filehandle.js.map +0 -1
- package/dist/htscodecs/main_arith_gen.d.ts +0 -1
- package/dist/htscodecs/main_arith_gen.js +0 -86
- package/dist/htscodecs/main_arith_gen.js.map +0 -1
- package/dist/htscodecs/main_fqzcomp.d.ts +0 -1
- package/dist/htscodecs/main_fqzcomp.js +0 -112
- package/dist/htscodecs/main_fqzcomp.js.map +0 -1
- package/dist/htscodecs/main_rans.d.ts +0 -1
- package/dist/htscodecs/main_rans.js +0 -83
- package/dist/htscodecs/main_rans.js.map +0 -1
- package/dist/htscodecs/main_rans4x16.d.ts +0 -1
- package/dist/htscodecs/main_rans4x16.js +0 -82
- package/dist/htscodecs/main_rans4x16.js.map +0 -1
- package/dist/htscodecs/main_tok3.d.ts +0 -1
- package/dist/htscodecs/main_tok3.js +0 -84
- package/dist/htscodecs/main_tok3.js.map +0 -1
- package/dist/unzip-pako.d.ts +0 -2
- package/dist/unzip-pako.js +0 -9
- package/dist/unzip-pako.js.map +0 -1
- package/esm/cramFile/filehandle.d.ts +0 -1
- package/esm/cramFile/filehandle.js +0 -2
- package/esm/cramFile/filehandle.js.map +0 -1
- package/esm/htscodecs/main_arith_gen.d.ts +0 -1
- package/esm/htscodecs/main_arith_gen.js +0 -86
- package/esm/htscodecs/main_arith_gen.js.map +0 -1
- package/esm/htscodecs/main_fqzcomp.d.ts +0 -1
- package/esm/htscodecs/main_fqzcomp.js +0 -112
- package/esm/htscodecs/main_fqzcomp.js.map +0 -1
- package/esm/htscodecs/main_rans.d.ts +0 -1
- package/esm/htscodecs/main_rans.js +0 -83
- package/esm/htscodecs/main_rans.js.map +0 -1
- package/esm/htscodecs/main_rans4x16.d.ts +0 -1
- package/esm/htscodecs/main_rans4x16.js +0 -82
- package/esm/htscodecs/main_rans4x16.js.map +0 -1
- package/esm/htscodecs/main_tok3.d.ts +0 -1
- package/esm/htscodecs/main_tok3.js +0 -84
- package/esm/htscodecs/main_tok3.js.map +0 -1
- package/esm/unzip-pako.d.ts +0 -2
- package/esm/unzip-pako.js +0 -6
- package/esm/unzip-pako.js.map +0 -1
- package/src/cramFile/filehandle.ts +0 -1
- package/src/htscodecs/Makefile +0 -142
- package/src/htscodecs/README.md +0 -64
- package/src/htscodecs/main_arith_gen.js +0 -96
- package/src/htscodecs/main_fqzcomp.js +0 -113
- package/src/htscodecs/main_rans.js +0 -88
- package/src/htscodecs/main_rans4x16.js +0 -87
- package/src/htscodecs/main_tok3.js +0 -86
- package/src/unzip-pako.ts +0 -6
|
@@ -36,6 +36,23 @@ const IOStream = require('./iostream')
|
|
|
36
36
|
const ByteModel = require('./byte_model')
|
|
37
37
|
const bzip2 = require('bzip2')
|
|
38
38
|
|
|
39
|
+
function sum(array) {
|
|
40
|
+
let sum = 0
|
|
41
|
+
for (const entry of array) {
|
|
42
|
+
sum += entry.length
|
|
43
|
+
}
|
|
44
|
+
return sum
|
|
45
|
+
}
|
|
46
|
+
function concatUint8Array(args) {
|
|
47
|
+
const mergedArray = new Uint8Array(sum(args))
|
|
48
|
+
let offset = 0
|
|
49
|
+
for (const entry of args) {
|
|
50
|
+
mergedArray.set(entry, offset)
|
|
51
|
+
offset += entry.length
|
|
52
|
+
}
|
|
53
|
+
return mergedArray
|
|
54
|
+
}
|
|
55
|
+
|
|
39
56
|
const ARITH_ORDER = 1
|
|
40
57
|
const ARITH_EXT = 4
|
|
41
58
|
const ARITH_STRIPE = 8
|
|
@@ -87,44 +104,10 @@ module.exports = class RangeCoderGen {
|
|
|
87
104
|
return data
|
|
88
105
|
}
|
|
89
106
|
|
|
90
|
-
encode(src, flags) {
|
|
91
|
-
this.stream = new IOStream('', 0, src.length * 1.1 + 100) // guestimate worst case!
|
|
92
|
-
|
|
93
|
-
this.stream.WriteByte(flags)
|
|
94
|
-
if (!(flags & ARITH_NOSIZE)) this.stream.WriteUint7(src.length)
|
|
95
|
-
|
|
96
|
-
if (flags & ARITH_STRIPE)
|
|
97
|
-
return Buffer.concat([
|
|
98
|
-
this.stream.buf.slice(0, this.stream.pos),
|
|
99
|
-
this.encodeStripe(this.stream, src, flags >> 8),
|
|
100
|
-
])
|
|
101
|
-
|
|
102
|
-
var order = flags & ARITH_ORDER
|
|
103
|
-
var e_len = src.length
|
|
104
|
-
|
|
105
|
-
// step 1: Encode meta-data
|
|
106
|
-
var pack_meta
|
|
107
|
-
if (flags & ARITH_PACK) [pack_meta, src, e_len] = this.encodePack(src)
|
|
108
|
-
|
|
109
|
-
// step 2: Write any meta data
|
|
110
|
-
if (flags & ARITH_PACK) this.stream.WriteStream(pack_meta)
|
|
111
|
-
|
|
112
|
-
// step 3: arith encoding below
|
|
113
|
-
if (flags & ARITH_RLE) {
|
|
114
|
-
return order
|
|
115
|
-
? this.encodeRLE1(src, e_len, this.stream)
|
|
116
|
-
: this.encodeRLE0(src, e_len, this.stream)
|
|
117
|
-
} else {
|
|
118
|
-
return order
|
|
119
|
-
? this.encode1(src, e_len, this.stream)
|
|
120
|
-
: this.encode0(src, e_len, this.stream)
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
107
|
//----------------------------------------------------------------------
|
|
125
108
|
// Order-0 codec
|
|
126
109
|
decode0(stream, n_out) {
|
|
127
|
-
var output = new
|
|
110
|
+
var output = new Uint8Array(n_out)
|
|
128
111
|
|
|
129
112
|
var max_sym = stream.ReadByte()
|
|
130
113
|
if (max_sym == 0) max_sym = 256
|
|
@@ -140,27 +123,11 @@ module.exports = class RangeCoderGen {
|
|
|
140
123
|
return output
|
|
141
124
|
}
|
|
142
125
|
|
|
143
|
-
encode0(src, n_in, out) {
|
|
144
|
-
// Count the maximum symbol present
|
|
145
|
-
var max_sym = 0
|
|
146
|
-
for (var i = 0; i < n_in; i++) if (max_sym < src[i]) max_sym = src[i]
|
|
147
|
-
max_sym++ // FIXME not what spec states!?
|
|
148
|
-
|
|
149
|
-
var byte_model = new ByteModel(max_sym)
|
|
150
|
-
out.WriteByte(max_sym)
|
|
151
|
-
var rc = new RangeCoder(out)
|
|
152
|
-
|
|
153
|
-
for (var i = 0; i < n_in; i++) byte_model.ModelEncode(out, rc, src[i])
|
|
154
|
-
rc.RangeFinishEncode(out)
|
|
155
|
-
|
|
156
|
-
return out.buf.slice(0, out.pos)
|
|
157
|
-
}
|
|
158
|
-
|
|
159
126
|
//----------------------------------------------------------------------
|
|
160
127
|
// Order-1 codec
|
|
161
128
|
|
|
162
129
|
decode1(stream, n_out) {
|
|
163
|
-
var output = new
|
|
130
|
+
var output = new Uint8Array(n_out)
|
|
164
131
|
|
|
165
132
|
var max_sym = stream.ReadByte()
|
|
166
133
|
if (max_sym == 0) max_sym = 256
|
|
@@ -180,57 +147,27 @@ module.exports = class RangeCoderGen {
|
|
|
180
147
|
return output
|
|
181
148
|
}
|
|
182
149
|
|
|
183
|
-
encode1(src, n_in, out) {
|
|
184
|
-
// Count the maximum symbol present
|
|
185
|
-
var max_sym = 0
|
|
186
|
-
for (var i = 0; i < n_in; i++) if (max_sym < src[i]) max_sym = src[i]
|
|
187
|
-
max_sym++ // FIXME not what spec states!
|
|
188
|
-
|
|
189
|
-
var byte_model = new Array(max_sym)
|
|
190
|
-
for (var i = 0; i < max_sym; i++) byte_model[i] = new ByteModel(max_sym)
|
|
191
|
-
out.WriteByte(max_sym)
|
|
192
|
-
var rc = new RangeCoder(out)
|
|
193
|
-
|
|
194
|
-
var last = 0
|
|
195
|
-
for (var i = 0; i < n_in; i++) {
|
|
196
|
-
byte_model[last].ModelEncode(out, rc, src[i])
|
|
197
|
-
last = src[i]
|
|
198
|
-
}
|
|
199
|
-
rc.RangeFinishEncode(out)
|
|
200
|
-
|
|
201
|
-
return out.buf.slice(0, out.pos)
|
|
202
|
-
}
|
|
203
|
-
|
|
204
150
|
//----------------------------------------------------------------------
|
|
205
151
|
// External codec
|
|
206
152
|
decodeExt(stream, n_out) {
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
var j = 0
|
|
153
|
+
const bits = bzip2.array(stream.buf.slice(stream.pos))
|
|
154
|
+
let size = bzip2.header(bits)
|
|
155
|
+
let chunk
|
|
156
|
+
const chunks = []
|
|
212
157
|
do {
|
|
213
|
-
|
|
214
|
-
if (chunk
|
|
215
|
-
|
|
216
|
-
j += chunk.length
|
|
158
|
+
chunk = bzip2.decompress(bits, size)
|
|
159
|
+
if (chunk !== -1) {
|
|
160
|
+
chunks.push(chunk)
|
|
217
161
|
size -= chunk.length
|
|
218
162
|
}
|
|
219
|
-
} while (chunk
|
|
220
|
-
|
|
221
|
-
return output
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
encodeExt(stream, n_out) {
|
|
225
|
-
// We cannot compress using Bzip2 now as it's
|
|
226
|
-
// absent from bzip2.js, but consider using
|
|
227
|
-
// https://github.com/cscott/compressjs
|
|
163
|
+
} while (chunk !== -1)
|
|
164
|
+
return concatUint8Array(chunks)
|
|
228
165
|
}
|
|
229
166
|
|
|
230
167
|
//----------------------------------------------------------------------
|
|
231
168
|
// Order-0 RLE codec
|
|
232
169
|
decodeRLE0(stream, n_out) {
|
|
233
|
-
var output = new
|
|
170
|
+
var output = new Uint8Array(n_out)
|
|
234
171
|
|
|
235
172
|
var max_sym = stream.ReadByte()
|
|
236
173
|
if (max_sym == 0) max_sym = 256
|
|
@@ -260,51 +197,11 @@ module.exports = class RangeCoderGen {
|
|
|
260
197
|
return output
|
|
261
198
|
}
|
|
262
199
|
|
|
263
|
-
encodeRLE0(src, n_in, out) {
|
|
264
|
-
// Count the maximum symbol present
|
|
265
|
-
var max_sym = 0
|
|
266
|
-
for (var i = 0; i < n_in; i++) if (max_sym < src[i]) max_sym = src[i]
|
|
267
|
-
max_sym++ // FIXME not what spec states!
|
|
268
|
-
|
|
269
|
-
var model_lit = new ByteModel(max_sym)
|
|
270
|
-
var model_run = new Array(258)
|
|
271
|
-
for (var i = 0; i <= 257; i++) model_run[i] = new ByteModel(4)
|
|
272
|
-
|
|
273
|
-
out.WriteByte(max_sym)
|
|
274
|
-
var rc = new RangeCoder(out)
|
|
275
|
-
|
|
276
|
-
var i = 0
|
|
277
|
-
while (i < n_in) {
|
|
278
|
-
model_lit.ModelEncode(out, rc, src[i])
|
|
279
|
-
var run = 1
|
|
280
|
-
while (i + run < n_in && src[i + run] == src[i]) run++
|
|
281
|
-
run--
|
|
282
|
-
|
|
283
|
-
var rctx = src[i]
|
|
284
|
-
var last = src[i]
|
|
285
|
-
i += run + 1
|
|
286
|
-
|
|
287
|
-
var part = run >= 3 ? 3 : run
|
|
288
|
-
model_run[rctx].ModelEncode(out, rc, part)
|
|
289
|
-
run -= part
|
|
290
|
-
rctx = 256
|
|
291
|
-
while (part == 3) {
|
|
292
|
-
part = run >= 3 ? 3 : run
|
|
293
|
-
model_run[rctx].ModelEncode(out, rc, part)
|
|
294
|
-
rctx = 257
|
|
295
|
-
run -= part
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
rc.RangeFinishEncode(out)
|
|
299
|
-
|
|
300
|
-
return out.buf.slice(0, out.pos)
|
|
301
|
-
}
|
|
302
|
-
|
|
303
200
|
//----------------------------------------------------------------------
|
|
304
201
|
// Order-1 RLE codec
|
|
305
202
|
|
|
306
203
|
decodeRLE1(stream, n_out) {
|
|
307
|
-
var output = new
|
|
204
|
+
var output = new Uint8Array(n_out)
|
|
308
205
|
|
|
309
206
|
var max_sym = stream.ReadByte()
|
|
310
207
|
if (max_sym == 0) max_sym = 256
|
|
@@ -338,48 +235,6 @@ module.exports = class RangeCoderGen {
|
|
|
338
235
|
return output
|
|
339
236
|
}
|
|
340
237
|
|
|
341
|
-
encodeRLE1(src, n_in, out) {
|
|
342
|
-
// Count the maximum symbol present
|
|
343
|
-
var max_sym = 0
|
|
344
|
-
for (var i = 0; i < n_in; i++) if (max_sym < src[i]) max_sym = src[i]
|
|
345
|
-
max_sym++ // FIXME not what spec states!
|
|
346
|
-
|
|
347
|
-
var model_lit = new Array(max_sym)
|
|
348
|
-
for (var i = 0; i < max_sym; i++) model_lit[i] = new ByteModel(max_sym)
|
|
349
|
-
var model_run = new Array(258)
|
|
350
|
-
for (var i = 0; i <= 257; i++) model_run[i] = new ByteModel(4)
|
|
351
|
-
|
|
352
|
-
out.WriteByte(max_sym)
|
|
353
|
-
var rc = new RangeCoder(out)
|
|
354
|
-
|
|
355
|
-
var i = 0
|
|
356
|
-
var last = 0
|
|
357
|
-
while (i < n_in) {
|
|
358
|
-
model_lit[last].ModelEncode(out, rc, src[i])
|
|
359
|
-
var run = 1
|
|
360
|
-
while (i + run < n_in && src[i + run] == src[i]) run++
|
|
361
|
-
run--
|
|
362
|
-
|
|
363
|
-
var rctx = src[i]
|
|
364
|
-
last = src[i]
|
|
365
|
-
i += run + 1
|
|
366
|
-
|
|
367
|
-
var part = run >= 3 ? 3 : run
|
|
368
|
-
model_run[rctx].ModelEncode(out, rc, part)
|
|
369
|
-
run -= part
|
|
370
|
-
rctx = 256
|
|
371
|
-
while (part == 3) {
|
|
372
|
-
part = run >= 3 ? 3 : run
|
|
373
|
-
model_run[rctx].ModelEncode(out, rc, part)
|
|
374
|
-
rctx = 257
|
|
375
|
-
run -= part
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
rc.RangeFinishEncode(out)
|
|
379
|
-
|
|
380
|
-
return out.buf.slice(0, out.pos)
|
|
381
|
-
}
|
|
382
|
-
|
|
383
238
|
//----------------------------------------------------------------------
|
|
384
239
|
// Pack method
|
|
385
240
|
decodePackMeta(stream) {
|
|
@@ -394,7 +249,7 @@ module.exports = class RangeCoderGen {
|
|
|
394
249
|
}
|
|
395
250
|
|
|
396
251
|
decodePack(data, M, len) {
|
|
397
|
-
var out = new
|
|
252
|
+
var out = new Uint8Array(len)
|
|
398
253
|
|
|
399
254
|
if (this.nsym <= 1) {
|
|
400
255
|
// Constant value
|
|
@@ -452,124 +307,6 @@ module.exports = class RangeCoderGen {
|
|
|
452
307
|
return [stream, M, nsym]
|
|
453
308
|
}
|
|
454
309
|
|
|
455
|
-
encodePack(data) {
|
|
456
|
-
var meta, M, nsym
|
|
457
|
-
;[meta, M, nsym] = this.packMeta(data)
|
|
458
|
-
|
|
459
|
-
var len = data.length
|
|
460
|
-
var i = 0
|
|
461
|
-
if (nsym <= 1) {
|
|
462
|
-
// Constant values
|
|
463
|
-
meta.WriteUint7(0)
|
|
464
|
-
return [meta, new Buffer.allocUnsafe(0), 0]
|
|
465
|
-
}
|
|
466
|
-
|
|
467
|
-
if (nsym <= 2) {
|
|
468
|
-
// 1 bit per value
|
|
469
|
-
var out = new Buffer.allocUnsafe(Math.floor((len + 7) / 8))
|
|
470
|
-
for (var i = 0, j = 0; i < (len & ~7); i += 8, j++)
|
|
471
|
-
out[j] =
|
|
472
|
-
(M[data[i + 0]] << 0) +
|
|
473
|
-
(M[data[i + 1]] << 1) +
|
|
474
|
-
(M[data[i + 2]] << 2) +
|
|
475
|
-
(M[data[i + 3]] << 3) +
|
|
476
|
-
(M[data[i + 4]] << 4) +
|
|
477
|
-
(M[data[i + 5]] << 5) +
|
|
478
|
-
(M[data[i + 6]] << 6) +
|
|
479
|
-
(M[data[i + 7]] << 7)
|
|
480
|
-
if (i < len) {
|
|
481
|
-
out[j] = 0
|
|
482
|
-
var v = 0
|
|
483
|
-
while (i < len) {
|
|
484
|
-
out[j] |= M[data[i++]] << v
|
|
485
|
-
v++
|
|
486
|
-
}
|
|
487
|
-
j++
|
|
488
|
-
}
|
|
489
|
-
|
|
490
|
-
meta.WriteUint7(j)
|
|
491
|
-
return [meta, out, out.length]
|
|
492
|
-
}
|
|
493
|
-
|
|
494
|
-
if (nsym <= 4) {
|
|
495
|
-
// 2 bits per value
|
|
496
|
-
var out = new Buffer.allocUnsafe(Math.floor((len + 3) / 4))
|
|
497
|
-
for (var i = 0, j = 0; i < (len & ~3); i += 4, j++)
|
|
498
|
-
out[j] =
|
|
499
|
-
(M[data[i + 0]] << 0) +
|
|
500
|
-
(M[data[i + 1]] << 2) +
|
|
501
|
-
(M[data[i + 2]] << 4) +
|
|
502
|
-
(M[data[i + 3]] << 6)
|
|
503
|
-
|
|
504
|
-
if (i < len) {
|
|
505
|
-
out[j] = 0
|
|
506
|
-
var v = 0
|
|
507
|
-
while (i < len) {
|
|
508
|
-
out[j] |= M[data[i++]] << v
|
|
509
|
-
v += 2
|
|
510
|
-
}
|
|
511
|
-
j++
|
|
512
|
-
}
|
|
513
|
-
|
|
514
|
-
meta.WriteUint7(j)
|
|
515
|
-
return [meta, out, out.length]
|
|
516
|
-
}
|
|
517
|
-
|
|
518
|
-
if (nsym <= 16) {
|
|
519
|
-
// 4 bits per value
|
|
520
|
-
var out = new Buffer.allocUnsafe(Math.floor((len + 1) / 2))
|
|
521
|
-
for (var i = 0, j = 0; i < (len & ~1); i += 2, j++)
|
|
522
|
-
out[j] = (M[data[i + 0]] << 0) + (M[data[i + 1]] << 4)
|
|
523
|
-
if (i < len) out[j++] = M[data[i++]]
|
|
524
|
-
|
|
525
|
-
meta.WriteUint7(j)
|
|
526
|
-
return [meta, out, out.length]
|
|
527
|
-
}
|
|
528
|
-
|
|
529
|
-
// Otherwise an expensive NOP
|
|
530
|
-
meta.WriteUint7(data.length)
|
|
531
|
-
return [meta, data, data.length]
|
|
532
|
-
}
|
|
533
|
-
|
|
534
|
-
//----------------------------------------------------------------------
|
|
535
|
-
// STRIPE method
|
|
536
|
-
encodeStripe(hdr, src, N) {
|
|
537
|
-
if (N == 0) N = 4 // old default
|
|
538
|
-
|
|
539
|
-
// Split into multiple streams
|
|
540
|
-
var part = new Array(N)
|
|
541
|
-
var ulen = new Array(N)
|
|
542
|
-
for (var s = 0; s < N; s++) {
|
|
543
|
-
ulen[s] = Math.floor(src.length / N) + (src.length % N > s)
|
|
544
|
-
part[s] = new Array(ulen[s])
|
|
545
|
-
}
|
|
546
|
-
|
|
547
|
-
for (var x = 0, i = 0; i < src.length; i += N, x++) {
|
|
548
|
-
for (var j = 0; j < N; j++)
|
|
549
|
-
if (x < part[j].length) part[j][x] = src[i + j]
|
|
550
|
-
}
|
|
551
|
-
|
|
552
|
-
// Compress each part
|
|
553
|
-
var comp = new Array(N)
|
|
554
|
-
var total = 0
|
|
555
|
-
for (var s = 0; s < N; s++) {
|
|
556
|
-
// Example: try O0 and O1 and choose best
|
|
557
|
-
var comp0 = this.encode(part[s], 0)
|
|
558
|
-
var comp1 = this.encode(part[s], 1)
|
|
559
|
-
comp[s] = comp1.length < comp0.length ? comp1 : comp0
|
|
560
|
-
total += comp[s].length
|
|
561
|
-
}
|
|
562
|
-
|
|
563
|
-
// Serialise
|
|
564
|
-
var out = new IOStream('', 0, total + 5 * N + 1)
|
|
565
|
-
out.WriteByte(N)
|
|
566
|
-
for (var s = 0; s < N; s++) out.WriteUint7(comp[s].length)
|
|
567
|
-
|
|
568
|
-
for (var s = 0; s < N; s++) out.WriteData(comp[s], comp[s].length)
|
|
569
|
-
|
|
570
|
-
return out.buf.slice(0, out.buf.pos)
|
|
571
|
-
}
|
|
572
|
-
|
|
573
310
|
decodeStripe(stream, len) {
|
|
574
311
|
var N = stream.ReadByte()
|
|
575
312
|
|
|
@@ -586,7 +323,7 @@ module.exports = class RangeCoderGen {
|
|
|
586
323
|
}
|
|
587
324
|
|
|
588
325
|
// Transpose
|
|
589
|
-
var out = new
|
|
326
|
+
var out = new Uint8Array(len)
|
|
590
327
|
for (var j = 0; j < N; j++) {
|
|
591
328
|
for (var i = 0; i < ulen[j]; i++) {
|
|
592
329
|
out[i * N + j] = T[j][i]
|
|
@@ -599,7 +336,7 @@ module.exports = class RangeCoderGen {
|
|
|
599
336
|
//----------------------------------------------------------------------
|
|
600
337
|
// Cat method
|
|
601
338
|
decodeCat(stream, len) {
|
|
602
|
-
var out = new
|
|
339
|
+
var out = new Uint8Array(len)
|
|
603
340
|
for (var i = 0; i < len; i++) out[i] = stream.ReadByte()
|
|
604
341
|
|
|
605
342
|
return out
|