@gmod/cram 3.0.7 → 4.0.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/craiIndex.js +70 -87
- package/dist/craiIndex.js.map +1 -1
- package/dist/cram-bundle.js +1 -1
- 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 +2 -2
- 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 +2 -2
- package/esm/io/index.js +1 -1
- 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 +5 -4
- 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
|
@@ -75,94 +75,6 @@ function RansRenorm(src, R) {
|
|
|
75
75
|
return R
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
// RanEnc* is for encoder
|
|
79
|
-
function RansEncInit() {
|
|
80
|
-
return 1 << 15
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
function RansEncFlush(R, dst) {
|
|
84
|
-
dst.WriteByteNeg((R >> 24) & 0xff)
|
|
85
|
-
dst.WriteByteNeg((R >> 16) & 0xff)
|
|
86
|
-
dst.WriteByteNeg((R >> 8) & 0xff)
|
|
87
|
-
dst.WriteByteNeg((R >> 0) & 0xff)
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
function RansEncRenorm(R, dst, freq, scale_bits) {
|
|
91
|
-
//var R_max = (((1 << 15) >> scale_bits) << 16) * freq;
|
|
92
|
-
var R_max = (1 << (31 - scale_bits)) * freq
|
|
93
|
-
|
|
94
|
-
while (R >= R_max) {
|
|
95
|
-
dst.WriteByteNeg((R >> 8) & 0xff)
|
|
96
|
-
dst.WriteByteNeg(R & 0xff)
|
|
97
|
-
R >>= 16
|
|
98
|
-
}
|
|
99
|
-
return R
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// Puts a symbol with frequency freq, cumulative freq start
|
|
103
|
-
// and total freq 1<<scale_bits.
|
|
104
|
-
//
|
|
105
|
-
// Note with static probabilities, /freq and %freq could be
|
|
106
|
-
// precomputed via multiplies and shifts.
|
|
107
|
-
function RansEncPut(R, dst, start, freq, scale_bits) {
|
|
108
|
-
var scale = 1 << scale_bits
|
|
109
|
-
R = RansEncRenorm(R, dst, freq, scale_bits)
|
|
110
|
-
R = (Math.floor(R / freq) << scale_bits) + (R % freq) + start
|
|
111
|
-
return R
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
//----------------------------------------------------------------------
|
|
115
|
-
// Run length encoding
|
|
116
|
-
function EncodeRLE(src, N) {
|
|
117
|
-
// Step 1: find which symbols benefit from RLE
|
|
118
|
-
var L = new Array(256)
|
|
119
|
-
for (var i = 0; i < 256; i++) L[i] = 0
|
|
120
|
-
|
|
121
|
-
var last = -1
|
|
122
|
-
for (var i = 0; i < src.length; i++) {
|
|
123
|
-
L[src[i]] += src[i] == last ? 1 : -1
|
|
124
|
-
last = src[i]
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
var nrle = 0
|
|
128
|
-
for (var i = 0; i < 256; i++) if (L[i] > 0) nrle++
|
|
129
|
-
|
|
130
|
-
if (!nrle) {
|
|
131
|
-
// Format cannot cope with zero RLE symbols, so pick one!
|
|
132
|
-
nrle = 1
|
|
133
|
-
L[0] = 1
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
// Start meta-data as list of symbols to RLE
|
|
137
|
-
var meta = new IOStream('', 0, nrle + 1 + src.length)
|
|
138
|
-
meta.WriteByte(nrle)
|
|
139
|
-
for (var i = 0; i < 256; i++) if (L[i] > 0) meta.WriteByte(i)
|
|
140
|
-
|
|
141
|
-
// Step 2: Now apply RLE itself
|
|
142
|
-
var data = new Buffer.allocUnsafe(src.length)
|
|
143
|
-
var dpos = 0
|
|
144
|
-
for (var i = 0; i < src.length; i++) {
|
|
145
|
-
data[dpos++] = src[i]
|
|
146
|
-
if (L[src[i]] > 0) {
|
|
147
|
-
last = src[i]
|
|
148
|
-
var run = 0
|
|
149
|
-
while (i + run + 1 < src.length && src[i + run + 1] == last) run++
|
|
150
|
-
meta.WriteUint7(run)
|
|
151
|
-
i += run
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
// Compress the meta-data
|
|
156
|
-
var cmeta = RansEncode0(meta.buf.slice(0, meta.pos), N)
|
|
157
|
-
var hdr = new IOStream('', 0, 16)
|
|
158
|
-
hdr.WriteUint7(meta.pos * 2) // Uncompressed meta-data length + compressed-bit-flag(0)
|
|
159
|
-
hdr.WriteUint7(dpos) // Length of RLE encoded data
|
|
160
|
-
hdr.WriteUint7(cmeta.length) // Compressed meta-data length
|
|
161
|
-
var meta = Buffer.concat([hdr.buf.slice(0, hdr.pos), cmeta])
|
|
162
|
-
|
|
163
|
-
return [meta, data.slice(0, dpos)]
|
|
164
|
-
}
|
|
165
|
-
|
|
166
78
|
function DecodeRLEMeta(src, N) {
|
|
167
79
|
var u_meta_len = src.ReadUint7()
|
|
168
80
|
var rle_len = src.ReadUint7()
|
|
@@ -189,7 +101,7 @@ function DecodeRLEMeta(src, N) {
|
|
|
189
101
|
function DecodeRLE(buf, L, rle_meta, len) {
|
|
190
102
|
var src = new IOStream(buf)
|
|
191
103
|
|
|
192
|
-
var out = new
|
|
104
|
+
var out = new Uint8Array(len)
|
|
193
105
|
|
|
194
106
|
// Expand up buf+meta to out; i = buf index, j = out index
|
|
195
107
|
var j = 0
|
|
@@ -206,70 +118,6 @@ function DecodeRLE(buf, L, rle_meta, len) {
|
|
|
206
118
|
return out
|
|
207
119
|
}
|
|
208
120
|
|
|
209
|
-
//----------------------------------------------------------------------
|
|
210
|
-
// Bit packing
|
|
211
|
-
|
|
212
|
-
function EncodePack(src) {
|
|
213
|
-
// Step 1: identify number of distinct symbols
|
|
214
|
-
var F = new Array(256)
|
|
215
|
-
for (var i = 0; i < 256; i++) F[i] = 0
|
|
216
|
-
|
|
217
|
-
for (var i = 0; i < src.length; i++) F[src[i]]++
|
|
218
|
-
|
|
219
|
-
var P = new Array(256)
|
|
220
|
-
var nsym = 0
|
|
221
|
-
for (var i = 0; i < 256; i++) if (F[i] > 0) P[i] = nsym++
|
|
222
|
-
|
|
223
|
-
if (nsym > 16) {
|
|
224
|
-
//console.error("Too many symbols to pack:",nsym)
|
|
225
|
-
return
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
// Pack data
|
|
229
|
-
if (nsym <= 1) {
|
|
230
|
-
// Constant
|
|
231
|
-
var data = new Buffer.allocUnsafe(0)
|
|
232
|
-
} else if (nsym <= 2) {
|
|
233
|
-
// 1 bit per value
|
|
234
|
-
var data = new Buffer.allocUnsafe(Math.ceil(src.length / 8))
|
|
235
|
-
var j = -1
|
|
236
|
-
for (i = 0; i < src.length; i++) {
|
|
237
|
-
if (i % 8 == 0) data[++j] = 0
|
|
238
|
-
data[j] += P[src[i]] << i % 8
|
|
239
|
-
}
|
|
240
|
-
} else if (nsym <= 4) {
|
|
241
|
-
// 2 bits per value
|
|
242
|
-
var data = new Buffer.allocUnsafe(Math.ceil(src.length / 4))
|
|
243
|
-
var j = -1
|
|
244
|
-
for (i = 0; i < src.length; i++) {
|
|
245
|
-
if (i % 4 == 0) data[++j] = 0
|
|
246
|
-
data[j] += P[src[i]] << ((i % 4) * 2)
|
|
247
|
-
}
|
|
248
|
-
} else {
|
|
249
|
-
// 4 bits per value
|
|
250
|
-
var data = new Buffer.allocUnsafe(Math.ceil(src.length / 2))
|
|
251
|
-
var j = -1
|
|
252
|
-
for (i = 0; i < src.length; i++) {
|
|
253
|
-
if (i % 2 == 0) data[++j] = 0
|
|
254
|
-
data[j] += P[src[i]] << ((i % 2) * 4)
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
// Produce pack meta-data
|
|
259
|
-
var meta = new IOStream('', 0, nsym + 5)
|
|
260
|
-
meta.WriteByte(nsym)
|
|
261
|
-
var j = 0
|
|
262
|
-
for (var i = 0; i < 256; i++) {
|
|
263
|
-
if (F[i] > 0) {
|
|
264
|
-
F[i] = j++
|
|
265
|
-
meta.WriteByte(i)
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
meta.WriteUint7(data.length)
|
|
269
|
-
|
|
270
|
-
return [meta.buf.slice(0, meta.pos), data]
|
|
271
|
-
}
|
|
272
|
-
|
|
273
121
|
// Pack meta data is the number and value of distinct symbols plus
|
|
274
122
|
// the length of the packed byte stream.
|
|
275
123
|
function DecodePackMeta(src) {
|
|
@@ -286,7 +134,7 @@ function DecodePackMeta(src) {
|
|
|
286
134
|
// Extract bits from src producing output of length len.
|
|
287
135
|
// Nsym is number of distinct symbols used.
|
|
288
136
|
function DecodePack(data, P, nsym, len) {
|
|
289
|
-
var out = new
|
|
137
|
+
var out = new Uint8Array(len)
|
|
290
138
|
var j = 0
|
|
291
139
|
|
|
292
140
|
// Constant value
|
|
@@ -327,52 +175,6 @@ function DecodePack(data, P, nsym, len) {
|
|
|
327
175
|
return out
|
|
328
176
|
}
|
|
329
177
|
|
|
330
|
-
//----------------------------------------------------------------------
|
|
331
|
-
// 4 way interleaving.
|
|
332
|
-
// This is simply 4 rANS streams interleaved to form bytes 0,4,8...,
|
|
333
|
-
// 1,5,9..., 2,6,10... and 3,7,11...
|
|
334
|
-
//
|
|
335
|
-
// It works well when the distributions differ for each of the 4 bytes,
|
|
336
|
-
// for example when compressing a series of 32-bit integers.
|
|
337
|
-
//
|
|
338
|
-
// Maybe make this more general purpose of X* where we specify the stripe
|
|
339
|
-
// size instead of fixing it at 4?
|
|
340
|
-
function RansEncodeStripe(hdr, src, N) {
|
|
341
|
-
if (N == 0) N = 4 // old default
|
|
342
|
-
|
|
343
|
-
// Split into multiple streams
|
|
344
|
-
var part = new Array(N)
|
|
345
|
-
var ulen = new Array(N)
|
|
346
|
-
for (var s = 0; s < N; s++) {
|
|
347
|
-
ulen[s] = Math.floor(src.length / N) + (src.length % N > s)
|
|
348
|
-
part[s] = new Array(ulen[s])
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
for (var x = 0, i = 0; i < src.length; i += N, x++) {
|
|
352
|
-
for (var j = 0; j < N; j++) if (x < part[j].length) part[j][x] = src[i + j]
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
// Compress each part
|
|
356
|
-
var comp = new Array(N)
|
|
357
|
-
var total = 0
|
|
358
|
-
for (var s = 0; s < N; s++) {
|
|
359
|
-
// Example: try O0 and O1 and choose best
|
|
360
|
-
var comp0 = encode(part[s], 0)
|
|
361
|
-
var comp1 = encode(part[s], 1)
|
|
362
|
-
comp[s] = comp1.length < comp0.length ? comp1 : comp0
|
|
363
|
-
total += comp[s].length
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
// Serialise
|
|
367
|
-
var out = new IOStream('', 0, total + 5 * N + 1)
|
|
368
|
-
out.WriteByte(N)
|
|
369
|
-
for (var s = 0; s < N; s++) out.WriteUint7(comp[s].length)
|
|
370
|
-
|
|
371
|
-
for (var s = 0; s < N; s++) out.WriteData(comp[s], comp[s].length)
|
|
372
|
-
|
|
373
|
-
return out.buf.slice(0, out.buf.pos)
|
|
374
|
-
}
|
|
375
|
-
|
|
376
178
|
function RansDecodeStripe(src, len) {
|
|
377
179
|
var N = src.ReadByte()
|
|
378
180
|
|
|
@@ -389,7 +191,7 @@ function RansDecodeStripe(src, len) {
|
|
|
389
191
|
}
|
|
390
192
|
|
|
391
193
|
// Transpose
|
|
392
|
-
var out = new
|
|
194
|
+
var out = new Uint8Array(len)
|
|
393
195
|
for (var j = 0; j < N; j++) {
|
|
394
196
|
for (var i = 0; i < ulen[j]; i++) {
|
|
395
197
|
out[i * N + j] = T[j][i]
|
|
@@ -449,48 +251,6 @@ function RansDecodeStream(stream, n_out) {
|
|
|
449
251
|
return buf
|
|
450
252
|
}
|
|
451
253
|
|
|
452
|
-
function encode(src, format) {
|
|
453
|
-
var hdr = new IOStream('', 0, 10)
|
|
454
|
-
hdr.WriteByte(format)
|
|
455
|
-
|
|
456
|
-
var order = format & 1
|
|
457
|
-
var x32 = format & 4
|
|
458
|
-
var stripe = format & 8
|
|
459
|
-
var nosz = format & 16
|
|
460
|
-
var cat = format & 32
|
|
461
|
-
var rle = format & 64
|
|
462
|
-
var pack = format & 128
|
|
463
|
-
|
|
464
|
-
var Nway = x32 ? 32 : 4 // interleaving amount
|
|
465
|
-
var N = format >> 8 // stripe size
|
|
466
|
-
|
|
467
|
-
if (!nosz) hdr.WriteUint7(src.length)
|
|
468
|
-
|
|
469
|
-
if (stripe)
|
|
470
|
-
return Buffer.concat([
|
|
471
|
-
hdr.buf.slice(0, hdr.pos),
|
|
472
|
-
RansEncodeStripe(hdr, src, N),
|
|
473
|
-
])
|
|
474
|
-
|
|
475
|
-
var pack_meta = new Buffer.alloc(0)
|
|
476
|
-
if (pack) [pack_meta, src] = EncodePack(src)
|
|
477
|
-
|
|
478
|
-
var rle_meta = new Buffer.alloc(0)
|
|
479
|
-
if (rle) [rle_meta, src] = EncodeRLE(src, Nway)
|
|
480
|
-
|
|
481
|
-
if (src.length < 4 && order == 1) {
|
|
482
|
-
// Protect against short order-1 data due to RLE/Pack
|
|
483
|
-
order = 0
|
|
484
|
-
hdr.buf[0] &= ~1
|
|
485
|
-
}
|
|
486
|
-
|
|
487
|
-
if (cat) var comp = src
|
|
488
|
-
else if (order == 0) var comp = RansEncode0(src, Nway)
|
|
489
|
-
else var comp = RansEncode1(src, Nway)
|
|
490
|
-
|
|
491
|
-
return Buffer.concat([hdr.buf.slice(0, hdr.pos), pack_meta, rle_meta, comp])
|
|
492
|
-
}
|
|
493
|
-
|
|
494
254
|
//----------------------------------------------------------------------
|
|
495
255
|
// Order-0 decoder
|
|
496
256
|
|
|
@@ -552,7 +312,7 @@ function RansDecode0(src, nbytes, N) {
|
|
|
552
312
|
for (var i = 0; i < N; i++) R[i] = src.ReadUint32()
|
|
553
313
|
|
|
554
314
|
// Main decode loop
|
|
555
|
-
var output = new
|
|
315
|
+
var output = new Uint8Array(nbytes)
|
|
556
316
|
for (var i = 0; i < nbytes; i++) {
|
|
557
317
|
var ix = i & (N - 1) // equiv to i%N as N is power of 2
|
|
558
318
|
var f = RansGetCumulativeFreq(R[ix], 12)
|
|
@@ -567,57 +327,6 @@ function RansDecode0(src, nbytes, N) {
|
|
|
567
327
|
return output
|
|
568
328
|
}
|
|
569
329
|
|
|
570
|
-
//----------------------------------------------------------------------
|
|
571
|
-
// Order-0 encoder
|
|
572
|
-
|
|
573
|
-
function BuildFrequencies0(src, F) {
|
|
574
|
-
for (var i = 0; i < 256; i++) F[i] = 0
|
|
575
|
-
|
|
576
|
-
for (var i = 0; i < src.length; i++) F[src[i]]++
|
|
577
|
-
}
|
|
578
|
-
|
|
579
|
-
function NormaliseFrequencies0(F, bits) {
|
|
580
|
-
// Compute total
|
|
581
|
-
var tot = 0
|
|
582
|
-
for (var i = 0; i < 256; i++) tot += F[i]
|
|
583
|
-
|
|
584
|
-
// Scale total of frequencies to max
|
|
585
|
-
const max = 1 << bits
|
|
586
|
-
var scale = max / tot
|
|
587
|
-
do {
|
|
588
|
-
var max_val = 0
|
|
589
|
-
var max_idx = 0
|
|
590
|
-
var renorm = 0
|
|
591
|
-
tot = 0
|
|
592
|
-
for (var i = 0; i < 256; i++) {
|
|
593
|
-
if (F[i] == 0) continue
|
|
594
|
-
|
|
595
|
-
if (max_val < F[i]) {
|
|
596
|
-
max_val = F[i]
|
|
597
|
-
max_idx = i
|
|
598
|
-
}
|
|
599
|
-
|
|
600
|
-
F[i] = Math.floor(F[i] * scale)
|
|
601
|
-
if (F[i] == 0) F[i] = 1
|
|
602
|
-
|
|
603
|
-
tot += F[i]
|
|
604
|
-
}
|
|
605
|
-
|
|
606
|
-
// Adjust new tot to ensure it matches.
|
|
607
|
-
if (tot < max) {
|
|
608
|
-
// Too low, boost the most common symbol
|
|
609
|
-
F[max_idx] += max - tot
|
|
610
|
-
} else if (tot - max < F[max_idx] / 2 && F[max_idx] > 2) {
|
|
611
|
-
// Too high, reduce the common symbol
|
|
612
|
-
F[max_idx] -= tot - max
|
|
613
|
-
} else if (tot != max) {
|
|
614
|
-
// Much too high, fudge scale and try again.
|
|
615
|
-
scale = max / tot
|
|
616
|
-
renorm = 1
|
|
617
|
-
}
|
|
618
|
-
} while (renorm)
|
|
619
|
-
}
|
|
620
|
-
|
|
621
330
|
function NormaliseFrequencies0_Shift(F, bits) {
|
|
622
331
|
// Compute total and number of bits to shift by
|
|
623
332
|
var tot = 0
|
|
@@ -634,85 +343,6 @@ function NormaliseFrequencies0_Shift(F, bits) {
|
|
|
634
343
|
// Scale total of frequencies to (1<<bits)
|
|
635
344
|
for (var i = 0; i < 256; i++) F[i] <<= shift
|
|
636
345
|
}
|
|
637
|
-
|
|
638
|
-
function WriteAlphabet(out, F) {
|
|
639
|
-
var rle = 0
|
|
640
|
-
for (var i = 0; i < 256; i++) {
|
|
641
|
-
if (!F[i]) continue
|
|
642
|
-
|
|
643
|
-
if (rle > 0) rle--
|
|
644
|
-
else {
|
|
645
|
-
out.WriteByte(i)
|
|
646
|
-
|
|
647
|
-
if (i > 0 && F[i - 1] > 0) {
|
|
648
|
-
// We've encoded two symbol frequencies in a row.
|
|
649
|
-
// How many more are there? Store that count so
|
|
650
|
-
// we can avoid writing consecutive symbols.
|
|
651
|
-
for (rle = i + 1; rle < 256 && F[rle]; rle++);
|
|
652
|
-
rle -= i + 1
|
|
653
|
-
|
|
654
|
-
out.WriteByte(rle)
|
|
655
|
-
}
|
|
656
|
-
}
|
|
657
|
-
}
|
|
658
|
-
out.WriteByte(0)
|
|
659
|
-
}
|
|
660
|
-
|
|
661
|
-
function WriteFrequencies0(out, F) {
|
|
662
|
-
WriteAlphabet(out, F)
|
|
663
|
-
|
|
664
|
-
for (var i = 0; i < 256; i++) {
|
|
665
|
-
if (F[i]) out.WriteUint7(F[i])
|
|
666
|
-
}
|
|
667
|
-
}
|
|
668
|
-
|
|
669
|
-
function RansEncode0(src, N) {
|
|
670
|
-
const nbytes = src.length
|
|
671
|
-
var output = new IOStream('', 0, 257 * 3 + 9)
|
|
672
|
-
|
|
673
|
-
// Compute frequencies
|
|
674
|
-
var F = new Array(256)
|
|
675
|
-
BuildFrequencies0(src, F)
|
|
676
|
-
var bit_size = Math.ceil(Math.log2(nbytes))
|
|
677
|
-
if (bit_size > 12) bit_size = 12
|
|
678
|
-
NormaliseFrequencies0(F, bit_size)
|
|
679
|
-
WriteFrequencies0(output, F)
|
|
680
|
-
NormaliseFrequencies0(F, 12)
|
|
681
|
-
|
|
682
|
-
// Compute cumulative frequencies
|
|
683
|
-
var C = new Array(256)
|
|
684
|
-
C[0] = 0
|
|
685
|
-
for (var i = 1; i < 256; i++) C[i] = C[i - 1] + F[i - 1]
|
|
686
|
-
|
|
687
|
-
// Initialise rANS state
|
|
688
|
-
var R = new Array(N)
|
|
689
|
-
for (var i = 0; i < N; i++) R[i] = RansEncInit()
|
|
690
|
-
|
|
691
|
-
// Allow expansion room if trying to compress random data.
|
|
692
|
-
var rans_out = new IOStream(
|
|
693
|
-
'',
|
|
694
|
-
(nbytes * 1.05 + 100) >> 0,
|
|
695
|
-
(nbytes * 1.05 + 100) >> 0,
|
|
696
|
-
)
|
|
697
|
-
|
|
698
|
-
// Main encode loop
|
|
699
|
-
for (var i = nbytes - 1; i >= 0; i--)
|
|
700
|
-
R[i % N] = RansEncPut(R[i % N], rans_out, C[src[i]], F[src[i]], 12)
|
|
701
|
-
|
|
702
|
-
for (var i = N - 1; i >= 0; i--) RansEncFlush(R[i], rans_out)
|
|
703
|
-
|
|
704
|
-
// Stitch blocks together into final output buffer
|
|
705
|
-
//console.error("pos=",rans_out.pos, " len=",rans_out.length)
|
|
706
|
-
//console.error(rans_out.buf.slice(rans_out.pos, rans_out.length))
|
|
707
|
-
return Buffer.concat(
|
|
708
|
-
[
|
|
709
|
-
output.buf.slice(0, output.pos),
|
|
710
|
-
rans_out.buf.slice(rans_out.pos, rans_out.length),
|
|
711
|
-
],
|
|
712
|
-
output.pos + rans_out.length - rans_out.pos,
|
|
713
|
-
)
|
|
714
|
-
}
|
|
715
|
-
|
|
716
346
|
//----------------------------------------------------------------------
|
|
717
347
|
// Order-1 decoder
|
|
718
348
|
|
|
@@ -787,7 +417,7 @@ function RansDecode1(src, nbytes, N) {
|
|
|
787
417
|
}
|
|
788
418
|
|
|
789
419
|
// Main decode loop
|
|
790
|
-
var output = new
|
|
420
|
+
var output = new Uint8Array(nbytes)
|
|
791
421
|
var nbytesx = Math.floor(nbytes / N)
|
|
792
422
|
for (var i = 0; i < nbytesx; i++) {
|
|
793
423
|
for (var j = 0; j < N; j++) {
|
|
@@ -819,185 +449,4 @@ function RansDecode1(src, nbytes, N) {
|
|
|
819
449
|
return output
|
|
820
450
|
}
|
|
821
451
|
|
|
822
|
-
|
|
823
|
-
// Order-1 encoder
|
|
824
|
-
|
|
825
|
-
function BuildFrequencies1(src, F, F0, N) {
|
|
826
|
-
for (var i = 0; i < 256; i++) {
|
|
827
|
-
F0[i] = 0
|
|
828
|
-
for (var j = 0; j < 256; j++) F[i][j] = 0
|
|
829
|
-
}
|
|
830
|
-
|
|
831
|
-
var last = 0
|
|
832
|
-
for (var i = 0; i < src.length; i++) {
|
|
833
|
-
F0[last]++
|
|
834
|
-
F[last][src[i]]++
|
|
835
|
-
last = src[i]
|
|
836
|
-
}
|
|
837
|
-
F0[last]++
|
|
838
|
-
|
|
839
|
-
// Also accept we'll be starting at N points, not just byte 0
|
|
840
|
-
for (var i = 1; i < N; i++) F[0][src[i * Math.floor(src.length / N)]]++
|
|
841
|
-
F0[0] += N - 1
|
|
842
|
-
}
|
|
843
|
-
|
|
844
|
-
function NormaliseFrequencies1(F, F0, shift) {
|
|
845
|
-
for (var i = 0; i < 256; i++) {
|
|
846
|
-
if (!F0[i]) continue
|
|
847
|
-
|
|
848
|
-
var bit_size = Math.ceil(Math.log2(F0[i]))
|
|
849
|
-
if (bit_size > shift) bit_size = shift
|
|
850
|
-
|
|
851
|
-
NormaliseFrequencies0(F[i], bit_size)
|
|
852
|
-
}
|
|
853
|
-
}
|
|
854
|
-
|
|
855
|
-
function NormaliseFrequencies1_Shift(F, F0, shift) {
|
|
856
|
-
for (var i = 0; i < 256; i++)
|
|
857
|
-
if (F0[i]) NormaliseFrequencies0_Shift(F[i], shift)
|
|
858
|
-
}
|
|
859
|
-
|
|
860
|
-
function WriteFrequencies1(out, F, F0) {
|
|
861
|
-
WriteAlphabet(out, F0)
|
|
862
|
-
|
|
863
|
-
for (var i = 0; i < 256; i++) {
|
|
864
|
-
if (!F0[i]) continue
|
|
865
|
-
|
|
866
|
-
var run = 0
|
|
867
|
-
for (var j = 0; j < 256; j++) {
|
|
868
|
-
if (!F0[j]) continue
|
|
869
|
-
|
|
870
|
-
if (run) {
|
|
871
|
-
run--
|
|
872
|
-
} else {
|
|
873
|
-
out.WriteUint7(F[i][j])
|
|
874
|
-
|
|
875
|
-
if (!F[i][j]) {
|
|
876
|
-
// Count how many more zero-freqs we have
|
|
877
|
-
for (var k = j + 1; k < 256; k++) {
|
|
878
|
-
if (!F0[k]) continue
|
|
879
|
-
|
|
880
|
-
if (F[i][k] == 0) run++
|
|
881
|
-
else break
|
|
882
|
-
}
|
|
883
|
-
out.WriteByte(run)
|
|
884
|
-
}
|
|
885
|
-
}
|
|
886
|
-
}
|
|
887
|
-
}
|
|
888
|
-
}
|
|
889
|
-
|
|
890
|
-
function RansEncode1(src, N) {
|
|
891
|
-
const nbytes = src.length
|
|
892
|
-
var output = new IOStream('', 0, 257 * 257 * 3 + 9)
|
|
893
|
-
|
|
894
|
-
// Compute frequencies
|
|
895
|
-
var F0 = new Array(256)
|
|
896
|
-
var F = new Array(256)
|
|
897
|
-
var C = new Array(256)
|
|
898
|
-
for (var i = 0; i < 256; i++) {
|
|
899
|
-
F[i] = new Array(256)
|
|
900
|
-
C[i] = new Array(256)
|
|
901
|
-
}
|
|
902
|
-
|
|
903
|
-
// Frequency precision
|
|
904
|
-
var shift = 12
|
|
905
|
-
|
|
906
|
-
BuildFrequencies1(src, F, F0, N)
|
|
907
|
-
NormaliseFrequencies1(F, F0, shift)
|
|
908
|
-
|
|
909
|
-
// Store frequencies, possibly compressed
|
|
910
|
-
var freq = new IOStream('', 0, 257 * 257 * 3 + 9)
|
|
911
|
-
|
|
912
|
-
WriteFrequencies1(freq, F, F0)
|
|
913
|
-
|
|
914
|
-
var cfreq = RansEncode0(freq.buf.slice(0, freq.pos), 4)
|
|
915
|
-
if (cfreq.length < freq.pos) {
|
|
916
|
-
output.WriteByte(1 | (shift << 4))
|
|
917
|
-
output.WriteUint7(freq.pos)
|
|
918
|
-
output.WriteUint7(cfreq.length)
|
|
919
|
-
output.WriteData(cfreq, cfreq.length)
|
|
920
|
-
} else {
|
|
921
|
-
output.WriteByte(0 | (shift << 4))
|
|
922
|
-
output.WriteData(freq.buf, freq.pos)
|
|
923
|
-
}
|
|
924
|
-
|
|
925
|
-
// Normalise and compute cumulative frequencies
|
|
926
|
-
NormaliseFrequencies1_Shift(F, F0, shift)
|
|
927
|
-
for (var i = 0; i < 256; i++) {
|
|
928
|
-
if (!F0[i]) continue
|
|
929
|
-
|
|
930
|
-
C[i][0] = 0
|
|
931
|
-
for (var j = 1; j < 256; j++) C[i][j] = C[i][j - 1] + F[i][j - 1]
|
|
932
|
-
}
|
|
933
|
-
|
|
934
|
-
// Initialise rANS state
|
|
935
|
-
var R = new Array(N)
|
|
936
|
-
var L = new Array(N)
|
|
937
|
-
for (var j = 0; j < N; j++) {
|
|
938
|
-
R[j] = RansEncInit()
|
|
939
|
-
L[j] = 0
|
|
940
|
-
}
|
|
941
|
-
var rans_out = new IOStream(
|
|
942
|
-
'',
|
|
943
|
-
(nbytes * 1.05 + 100) >> 0,
|
|
944
|
-
(nbytes * 1.05 + 100) >> 0,
|
|
945
|
-
)
|
|
946
|
-
|
|
947
|
-
// We have N rans codecs running in parallel on its own 1/Nth of buffer
|
|
948
|
-
var nbytesx = Math.floor(nbytes / N)
|
|
949
|
-
var idx = new Array(N)
|
|
950
|
-
var last = new Array(N)
|
|
951
|
-
for (var j = 0; j < N; j++) {
|
|
952
|
-
idx[j] = (j + 1) * nbytesx - 2
|
|
953
|
-
last[j] = src[idx[j] + 1]
|
|
954
|
-
}
|
|
955
|
-
|
|
956
|
-
// Deal with the remainder if not a multiple of N
|
|
957
|
-
last[N - 1] = src[nbytes - 1]
|
|
958
|
-
for (var i = nbytes - 2; i > N * nbytesx - 2; i--) {
|
|
959
|
-
R[N - 1] = RansEncPut(
|
|
960
|
-
R[N - 1],
|
|
961
|
-
rans_out,
|
|
962
|
-
C[src[i]][last[N - 1]],
|
|
963
|
-
F[src[i]][last[N - 1]],
|
|
964
|
-
shift,
|
|
965
|
-
)
|
|
966
|
-
last[N - 1] = src[i]
|
|
967
|
-
}
|
|
968
|
-
|
|
969
|
-
// Main encode loop
|
|
970
|
-
var s = new Array(N)
|
|
971
|
-
while (idx[0] >= 0) {
|
|
972
|
-
// Separate loop as a speed optimisation
|
|
973
|
-
for (var j = N - 1; j >= 0; j--) s[j] = src[idx[j]]
|
|
974
|
-
for (var j = N - 1; j >= 0; j--) {
|
|
975
|
-
R[j] = RansEncPut(
|
|
976
|
-
R[j],
|
|
977
|
-
rans_out,
|
|
978
|
-
C[s[j]][last[j]],
|
|
979
|
-
F[s[j]][last[j]],
|
|
980
|
-
shift,
|
|
981
|
-
)
|
|
982
|
-
last[j] = s[j]
|
|
983
|
-
idx[j]--
|
|
984
|
-
}
|
|
985
|
-
}
|
|
986
|
-
|
|
987
|
-
for (var j = N - 1; j >= 0; j--) {
|
|
988
|
-
R[j] = RansEncPut(R[j], rans_out, C[0][last[j]], F[0][last[j]], shift)
|
|
989
|
-
}
|
|
990
|
-
|
|
991
|
-
for (var i = N - 1; i >= 0; i--) RansEncFlush(R[i], rans_out)
|
|
992
|
-
|
|
993
|
-
// Stitch blocks together into final output buffer
|
|
994
|
-
return Buffer.concat(
|
|
995
|
-
[
|
|
996
|
-
output.buf.slice(0, output.pos),
|
|
997
|
-
rans_out.buf.slice(rans_out.pos, rans_out.length),
|
|
998
|
-
],
|
|
999
|
-
output.pos + rans_out.length - rans_out.pos,
|
|
1000
|
-
)
|
|
1001
|
-
}
|
|
1002
|
-
|
|
1003
|
-
module.exports = { decode, encode }
|
|
452
|
+
module.exports = { decode }
|
package/src/htscodecs/tok3.js
CHANGED
|
@@ -41,6 +41,23 @@ const IOStream = require('./iostream')
|
|
|
41
41
|
const rans = require('./rans4x16')
|
|
42
42
|
const arith_gen = require('./arith_gen')
|
|
43
43
|
|
|
44
|
+
function sum(array) {
|
|
45
|
+
let sum = 0
|
|
46
|
+
for (const entry of array) {
|
|
47
|
+
sum += entry.length
|
|
48
|
+
}
|
|
49
|
+
return sum
|
|
50
|
+
}
|
|
51
|
+
function concatUint8Array(args) {
|
|
52
|
+
const mergedArray = new Uint8Array(sum(args))
|
|
53
|
+
let offset = 0
|
|
54
|
+
for (const entry of args) {
|
|
55
|
+
mergedArray.set(entry, offset)
|
|
56
|
+
offset += entry.length
|
|
57
|
+
}
|
|
58
|
+
return mergedArray
|
|
59
|
+
}
|
|
60
|
+
|
|
44
61
|
var arith = new arith_gen()
|
|
45
62
|
|
|
46
63
|
const TOK_TYPE = 0
|
|
@@ -77,7 +94,7 @@ function DecodeTokenByteStreams(src, in_size, use_arith, nnames) {
|
|
|
77
94
|
|
|
78
95
|
if (type != TOK_TYPE && tok_new) {
|
|
79
96
|
var M = new Array(nnames - 1).fill(TOK_MATCH)
|
|
80
|
-
B[t][TOK_TYPE] = new IOStream(
|
|
97
|
+
B[t][TOK_TYPE] = new IOStream(concatUint8Array([new Uint8Array(type), M]))
|
|
81
98
|
}
|
|
82
99
|
|
|
83
100
|
if (tok_dup) {
|
package/src/index.ts
CHANGED
package/src/indexedCramFile.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Slice } from './craiIndex'
|
|
2
2
|
import CramFile from './cramFile'
|
|
3
|
-
import CramRecord from './cramFile/record'
|
|
4
3
|
import { SeqFetch } from './cramFile/file'
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
4
|
+
import CramRecord from './cramFile/record'
|
|
5
|
+
import { CramUnimplementedError } from './errors'
|
|
6
|
+
|
|
7
|
+
import type { GenericFilehandle } from 'generic-filehandle2'
|
|
7
8
|
|
|
8
9
|
export interface CramFileSource {
|
|
9
|
-
cramFilehandle?:
|
|
10
|
+
cramFilehandle?: GenericFilehandle
|
|
10
11
|
cramUrl?: string
|
|
11
12
|
cramPath?: string
|
|
12
13
|
}
|
package/src/io/index.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { LocalFile, RemoteFile } from 'generic-filehandle2'
|
|
2
|
+
|
|
3
|
+
import type { GenericFilehandle } from 'generic-filehandle2'
|
|
3
4
|
|
|
4
5
|
function open(
|
|
5
6
|
maybeUrl?: string,
|
|
6
7
|
maybePath?: string,
|
|
7
|
-
maybeFilehandle?:
|
|
8
|
-
):
|
|
8
|
+
maybeFilehandle?: GenericFilehandle,
|
|
9
|
+
): GenericFilehandle {
|
|
9
10
|
if (maybeFilehandle) {
|
|
10
11
|
return maybeFilehandle
|
|
11
12
|
}
|