@gmod/cram 4.0.1 → 4.0.4
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/cram-bundle.js +1 -1
- package/dist/cramFile/file.js +43 -9
- package/dist/cramFile/file.js.map +1 -1
- package/dist/cramFile/slice/decodeRecord.js +3 -3
- package/dist/cramFile/slice/decodeRecord.js.map +1 -1
- package/dist/cramFile/slice/index.d.ts +1 -1
- package/dist/cramFile/slice/index.js +3 -1
- package/dist/cramFile/slice/index.js.map +1 -1
- package/dist/cramFile/util.d.ts +0 -2
- package/dist/cramFile/util.js +3 -31
- package/dist/cramFile/util.js.map +1 -1
- package/dist/htscodecs/arith_gen.d.ts +5 -7
- package/dist/htscodecs/arith_gen.js +122 -105
- package/dist/htscodecs/arith_gen.js.map +1 -1
- package/dist/htscodecs/arith_sh.d.ts +1 -8
- package/dist/htscodecs/arith_sh.js +16 -10
- package/dist/htscodecs/arith_sh.js.map +1 -1
- package/dist/htscodecs/byte_model.d.ts +1 -6
- package/dist/htscodecs/byte_model.js +25 -17
- package/dist/htscodecs/byte_model.js.map +1 -1
- package/dist/htscodecs/fqzcomp.d.ts +1 -1
- package/dist/htscodecs/fqzcomp.js +98 -77
- package/dist/htscodecs/fqzcomp.js.map +1 -1
- package/dist/htscodecs/index.d.ts +5 -5
- package/dist/htscodecs/index.js +53 -16
- package/dist/htscodecs/index.js.map +1 -1
- package/dist/htscodecs/iostream.d.ts +9 -20
- package/dist/htscodecs/iostream.js +21 -116
- package/dist/htscodecs/iostream.js.map +1 -1
- package/dist/htscodecs/rans.d.ts +1 -1
- package/dist/htscodecs/rans.js +65 -54
- package/dist/htscodecs/rans.js.map +1 -1
- package/dist/htscodecs/rans4x16.d.ts +1 -1
- package/dist/htscodecs/rans4x16.js +151 -111
- package/dist/htscodecs/rans4x16.js.map +1 -1
- package/dist/htscodecs/tok3.d.ts +1 -2
- package/dist/htscodecs/tok3.js +82 -239
- package/dist/htscodecs/tok3.js.map +1 -1
- package/dist/indexedCramFile.d.ts +14 -8
- package/dist/indexedCramFile.js +16 -13
- package/dist/indexedCramFile.js.map +1 -1
- package/dist/util.d.ts +1 -0
- package/dist/util.js +20 -0
- package/dist/util.js.map +1 -0
- package/esm/cramFile/file.js +3 -2
- package/esm/cramFile/file.js.map +1 -1
- package/esm/cramFile/slice/decodeRecord.js +3 -3
- package/esm/cramFile/slice/decodeRecord.js.map +1 -1
- package/esm/cramFile/slice/index.d.ts +1 -1
- package/esm/cramFile/slice/index.js +3 -1
- package/esm/cramFile/slice/index.js.map +1 -1
- package/esm/cramFile/util.d.ts +0 -2
- package/esm/cramFile/util.js +3 -29
- package/esm/cramFile/util.js.map +1 -1
- package/esm/htscodecs/arith_gen.d.ts +5 -7
- package/esm/htscodecs/arith_gen.js +108 -97
- package/esm/htscodecs/arith_gen.js.map +1 -1
- package/esm/htscodecs/arith_sh.d.ts +1 -8
- package/esm/htscodecs/arith_sh.js +14 -11
- package/esm/htscodecs/arith_sh.js.map +1 -1
- package/esm/htscodecs/byte_model.d.ts +1 -6
- package/esm/htscodecs/byte_model.js +23 -18
- package/esm/htscodecs/byte_model.js.map +1 -1
- package/esm/htscodecs/fqzcomp.d.ts +1 -1
- package/esm/htscodecs/fqzcomp.js +91 -76
- package/esm/htscodecs/fqzcomp.js.map +1 -1
- package/esm/htscodecs/index.d.ts +5 -5
- package/esm/htscodecs/index.js +14 -20
- package/esm/htscodecs/index.js.map +1 -1
- package/esm/htscodecs/iostream.d.ts +9 -20
- package/esm/htscodecs/iostream.js +19 -117
- package/esm/htscodecs/iostream.js.map +1 -1
- package/esm/htscodecs/rans.d.ts +1 -1
- package/esm/htscodecs/rans.js +61 -56
- package/esm/htscodecs/rans.js.map +1 -1
- package/esm/htscodecs/rans4x16.d.ts +1 -1
- package/esm/htscodecs/rans4x16.js +143 -109
- package/esm/htscodecs/rans4x16.js.map +1 -1
- package/esm/htscodecs/tok3.d.ts +1 -2
- package/esm/htscodecs/tok3.js +41 -237
- package/esm/htscodecs/tok3.js.map +1 -1
- package/esm/indexedCramFile.d.ts +14 -8
- package/esm/indexedCramFile.js +16 -13
- package/esm/indexedCramFile.js.map +1 -1
- package/esm/util.d.ts +1 -0
- package/esm/util.js +17 -0
- package/esm/util.js.map +1 -0
- package/package.json +8 -9
- package/src/cramFile/file.ts +3 -2
- package/src/cramFile/slice/decodeRecord.ts +3 -5
- package/src/cramFile/slice/index.ts +3 -1
- package/src/cramFile/util.ts +6 -39
- package/src/htscodecs/{arith_gen.js → arith_gen.ts} +133 -95
- package/src/htscodecs/{arith_sh.js → arith_sh.ts} +17 -9
- package/src/htscodecs/{byte_model.js → byte_model.ts} +26 -16
- package/src/htscodecs/{fqzcomp.js → fqzcomp.ts} +108 -74
- package/src/htscodecs/{index.js → index.ts} +14 -20
- package/src/htscodecs/iostream.ts +159 -0
- package/src/htscodecs/{rans.js → rans.ts} +73 -56
- package/src/htscodecs/{rans4x16.js → rans4x16.ts} +180 -111
- package/src/htscodecs/tok3.ts +197 -0
- package/src/indexedCramFile.ts +24 -17
- package/src/util.ts +16 -0
- package/src/htscodecs/iostream.js +0 -257
- package/src/htscodecs/tok3.js +0 -413
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
/* eslint-disable no-var */
|
|
2
|
+
// @ts-nocheck
|
|
3
|
+
|
|
1
4
|
/*
|
|
2
5
|
* Copyright (c) 2019-2020 Genome Research Ltd.
|
|
3
6
|
* Author(s): James Bonfield
|
|
@@ -31,9 +34,9 @@
|
|
|
31
34
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
32
35
|
*/
|
|
33
36
|
|
|
34
|
-
|
|
37
|
+
import IOStream from './iostream'
|
|
35
38
|
|
|
36
|
-
|
|
39
|
+
// ----------------------------------------------------------------------
|
|
37
40
|
// rANS primitives itself
|
|
38
41
|
//
|
|
39
42
|
// RansGet* is decoder side
|
|
@@ -46,17 +49,21 @@ function RansGetSymbolFromFreq(C, f) {
|
|
|
46
49
|
// NOTE: Inefficient.
|
|
47
50
|
// In practice we would implement this via a precomputed
|
|
48
51
|
// lookup table C2S[f]; see RansBuildC2S below.
|
|
49
|
-
|
|
50
|
-
while (f >= C[s + 1])
|
|
52
|
+
let s = 0
|
|
53
|
+
while (f >= C[s + 1]) {
|
|
54
|
+
s++
|
|
55
|
+
}
|
|
51
56
|
|
|
52
57
|
return s
|
|
53
58
|
}
|
|
54
59
|
|
|
55
60
|
function RansBuildC2S(C) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
for (
|
|
59
|
-
while (f >= C[s + 1])
|
|
61
|
+
const C2S = new Array(0x1000)
|
|
62
|
+
let s = 0
|
|
63
|
+
for (let f = 0; f < 0x1000; f++) {
|
|
64
|
+
while (f >= C[s + 1]) {
|
|
65
|
+
s++
|
|
66
|
+
}
|
|
60
67
|
C2S[f] = s
|
|
61
68
|
}
|
|
62
69
|
return C2S
|
|
@@ -67,77 +74,83 @@ function RansAdvanceStep(R, c, f) {
|
|
|
67
74
|
}
|
|
68
75
|
|
|
69
76
|
function RansRenorm(src, R) {
|
|
70
|
-
while (R < 1 << 23)
|
|
77
|
+
while (R < 1 << 23) {
|
|
78
|
+
R = (R << 8) + src.ReadByte()
|
|
79
|
+
}
|
|
71
80
|
|
|
72
81
|
return R
|
|
73
82
|
}
|
|
74
|
-
|
|
83
|
+
// ----------------------------------------------------------------------
|
|
75
84
|
// Main rANS entry function: decodes a compressed src and
|
|
76
85
|
// returns the uncompressed buffer.
|
|
77
|
-
function decode(src) {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
return RansDecode0(stream, n_out)
|
|
85
|
-
} else {
|
|
86
|
-
return RansDecode1(stream, n_out)
|
|
87
|
-
}
|
|
86
|
+
export function decode(src) {
|
|
87
|
+
const stream = new IOStream(src)
|
|
88
|
+
const order = stream.ReadByte()
|
|
89
|
+
const n_in = stream.ReadUint32()
|
|
90
|
+
const n_out = stream.ReadUint32()
|
|
91
|
+
|
|
92
|
+
return order == 0 ? RansDecode0(stream, n_out) : RansDecode1(stream, n_out)
|
|
88
93
|
}
|
|
89
94
|
|
|
90
|
-
|
|
95
|
+
// ----------------------------------------------------------------------
|
|
91
96
|
// Order-0 decoder
|
|
92
97
|
|
|
93
98
|
// Decode a single table of order-0 frequences,
|
|
94
99
|
// filling out the F and C arrays.
|
|
95
100
|
function ReadFrequencies0(src, F, C) {
|
|
96
101
|
// Initialise; not in the specification - implicit?
|
|
97
|
-
for (var i = 0; i < 256; i++)
|
|
102
|
+
for (var i = 0; i < 256; i++) {
|
|
103
|
+
F[i] = 0
|
|
104
|
+
}
|
|
98
105
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
106
|
+
let sym = src.ReadByte()
|
|
107
|
+
let last_sym = sym
|
|
108
|
+
let rle = 0
|
|
102
109
|
|
|
103
110
|
// Read F[]
|
|
104
111
|
do {
|
|
105
|
-
|
|
112
|
+
const f = src.ReadITF8()
|
|
106
113
|
F[sym] = f
|
|
107
114
|
if (rle > 0) {
|
|
108
115
|
rle--
|
|
109
116
|
sym++
|
|
110
117
|
} else {
|
|
111
118
|
sym = src.ReadByte()
|
|
112
|
-
if (sym == last_sym + 1)
|
|
119
|
+
if (sym == last_sym + 1) {
|
|
120
|
+
rle = src.ReadByte()
|
|
121
|
+
}
|
|
113
122
|
}
|
|
114
123
|
last_sym = sym
|
|
115
124
|
} while (sym != 0)
|
|
116
125
|
|
|
117
126
|
// Compute C[] from F[]
|
|
118
127
|
C[0] = 0
|
|
119
|
-
for (var i = 0; i <= 255; i++)
|
|
128
|
+
for (var i = 0; i <= 255; i++) {
|
|
129
|
+
C[i + 1] = C[i] + F[i]
|
|
130
|
+
}
|
|
120
131
|
}
|
|
121
132
|
|
|
122
133
|
function RansDecode0(src, nbytes) {
|
|
123
134
|
// Decode frequencies
|
|
124
|
-
|
|
125
|
-
|
|
135
|
+
const F = new Array(256)
|
|
136
|
+
const C = new Array(256)
|
|
126
137
|
ReadFrequencies0(src, F, C)
|
|
127
138
|
|
|
128
139
|
// Fast lookup to avoid slow RansGetSymbolFromFreq
|
|
129
|
-
|
|
140
|
+
const C2S = RansBuildC2S(C)
|
|
130
141
|
|
|
131
142
|
// Initialise rANS state
|
|
132
|
-
|
|
133
|
-
for (var i = 0; i < 4; i++)
|
|
143
|
+
const R = new Array(4)
|
|
144
|
+
for (var i = 0; i < 4; i++) {
|
|
145
|
+
R[i] = src.ReadUint32()
|
|
146
|
+
}
|
|
134
147
|
|
|
135
148
|
// Main decode loop
|
|
136
|
-
|
|
149
|
+
const output = new Uint8Array(nbytes)
|
|
137
150
|
for (var i = 0; i < nbytes; i++) {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
151
|
+
const i4 = i % 4
|
|
152
|
+
const f = RansGetCumulativeFreq(R[i4])
|
|
153
|
+
const s = C2S[f] // Equiv to RansGetSymbolFromFreq(C, f);
|
|
141
154
|
|
|
142
155
|
output[i] = s
|
|
143
156
|
R[i4] = RansAdvanceStep(R[i4], C[s], F[s])
|
|
@@ -147,22 +160,24 @@ function RansDecode0(src, nbytes) {
|
|
|
147
160
|
return output
|
|
148
161
|
}
|
|
149
162
|
|
|
150
|
-
|
|
163
|
+
// ----------------------------------------------------------------------
|
|
151
164
|
// Order-1 decoder
|
|
152
165
|
|
|
153
166
|
// Decode a table of order-1 frequences,
|
|
154
167
|
// filling out the F and C arrays.
|
|
155
168
|
function ReadFrequencies1(src, F, C) {
|
|
156
169
|
// Initialise; not in the specification - implicit?
|
|
157
|
-
for (
|
|
170
|
+
for (let i = 0; i < 256; i++) {
|
|
158
171
|
F[i] = new Array(256)
|
|
159
172
|
C[i] = new Array(256)
|
|
160
|
-
for (
|
|
173
|
+
for (let j = 0; j < 256; j++) {
|
|
174
|
+
F[i][j] = 0
|
|
175
|
+
}
|
|
161
176
|
}
|
|
162
177
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
178
|
+
let sym = src.ReadByte()
|
|
179
|
+
let last_sym = sym
|
|
180
|
+
let rle = 0
|
|
166
181
|
|
|
167
182
|
// Read F[]
|
|
168
183
|
do {
|
|
@@ -173,7 +188,9 @@ function ReadFrequencies1(src, F, C) {
|
|
|
173
188
|
sym++
|
|
174
189
|
} else {
|
|
175
190
|
sym = src.ReadByte()
|
|
176
|
-
if (sym == last_sym + 1)
|
|
191
|
+
if (sym == last_sym + 1) {
|
|
192
|
+
rle = src.ReadByte()
|
|
193
|
+
}
|
|
177
194
|
}
|
|
178
195
|
last_sym = sym
|
|
179
196
|
} while (sym != 0)
|
|
@@ -181,30 +198,32 @@ function ReadFrequencies1(src, F, C) {
|
|
|
181
198
|
|
|
182
199
|
function RansDecode1(src, nbytes) {
|
|
183
200
|
// Decode frequencies
|
|
184
|
-
|
|
185
|
-
|
|
201
|
+
const F = new Array(256)
|
|
202
|
+
const C = new Array(256)
|
|
186
203
|
ReadFrequencies1(src, F, C)
|
|
187
204
|
|
|
188
205
|
// Fast lookup to avoid slow RansGetSymbolFromFreq
|
|
189
|
-
|
|
190
|
-
for (var i = 0; i < 256; i++)
|
|
206
|
+
const C2S = new Array(256)
|
|
207
|
+
for (var i = 0; i < 256; i++) {
|
|
208
|
+
C2S[i] = RansBuildC2S(C[i])
|
|
209
|
+
}
|
|
191
210
|
|
|
192
211
|
// Initialise rANS state
|
|
193
|
-
|
|
194
|
-
|
|
212
|
+
const R = new Array(4)
|
|
213
|
+
const L = new Array(4)
|
|
195
214
|
for (var j = 0; j < 4; j++) {
|
|
196
215
|
R[j] = src.ReadUint32()
|
|
197
216
|
L[j] = 0
|
|
198
217
|
}
|
|
199
218
|
|
|
200
219
|
// Main decode loop
|
|
201
|
-
|
|
202
|
-
|
|
220
|
+
const output = new Uint8Array(nbytes)
|
|
221
|
+
const nbytes4 = Math.floor(nbytes / 4)
|
|
203
222
|
for (var i = 0; i < nbytes4; i++) {
|
|
204
223
|
for (var j = 0; j < 4; j++) {
|
|
205
224
|
var f = RansGetCumulativeFreq(R[j])
|
|
206
225
|
|
|
207
|
-
//var s = RansGetSymbolFromFreq(C[L[j]], f);
|
|
226
|
+
// var s = RansGetSymbolFromFreq(C[L[j]], f);
|
|
208
227
|
var s = C2S[L[j]][f] // Precomputed version of above
|
|
209
228
|
|
|
210
229
|
output[i + j * nbytes4] = s
|
|
@@ -229,5 +248,3 @@ function RansDecode1(src, nbytes) {
|
|
|
229
248
|
|
|
230
249
|
return output
|
|
231
250
|
}
|
|
232
|
-
|
|
233
|
-
module.exports = { decode }
|