@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.
Files changed (269) hide show
  1. package/dist/craiIndex.js +70 -87
  2. package/dist/craiIndex.js.map +1 -1
  3. package/dist/cram-bundle.js +1 -1
  4. package/dist/cram-bundle.js.LICENSE.txt +0 -9
  5. package/dist/cramFile/codecs/_base.d.ts +1 -1
  6. package/dist/cramFile/codecs/beta.d.ts +2 -2
  7. package/dist/cramFile/codecs/beta.js +1 -1
  8. package/dist/cramFile/codecs/beta.js.map +1 -1
  9. package/dist/cramFile/codecs/byteArrayLength.d.ts +2 -2
  10. package/dist/cramFile/codecs/byteArrayStop.d.ts +4 -4
  11. package/dist/cramFile/codecs/byteArrayStop.js +1 -1
  12. package/dist/cramFile/codecs/byteArrayStop.js.map +1 -1
  13. package/dist/cramFile/codecs/external.d.ts +1 -1
  14. package/dist/cramFile/codecs/external.js +1 -1
  15. package/dist/cramFile/codecs/external.js.map +1 -1
  16. package/dist/cramFile/codecs/gamma.d.ts +1 -1
  17. package/dist/cramFile/codecs/gamma.js +1 -1
  18. package/dist/cramFile/codecs/gamma.js.map +1 -1
  19. package/dist/cramFile/codecs/getBits.d.ts +1 -1
  20. package/dist/cramFile/codecs/getBits.js.map +1 -1
  21. package/dist/cramFile/codecs/huffman.d.ts +1 -1
  22. package/dist/cramFile/codecs/huffman.js +1 -1
  23. package/dist/cramFile/codecs/huffman.js.map +1 -1
  24. package/dist/cramFile/codecs/index.d.ts +1 -1
  25. package/dist/cramFile/codecs/index.js +5 -5
  26. package/dist/cramFile/codecs/index.js.map +1 -1
  27. package/dist/cramFile/codecs/subexp.d.ts +2 -2
  28. package/dist/cramFile/codecs/subexp.js +1 -1
  29. package/dist/cramFile/codecs/subexp.js.map +1 -1
  30. package/dist/cramFile/container/compressionScheme.d.ts +2 -2
  31. package/dist/cramFile/container/compressionScheme.js +1 -1
  32. package/dist/cramFile/container/compressionScheme.js.map +1 -1
  33. package/dist/cramFile/container/index.d.ts +1 -2
  34. package/dist/cramFile/container/index.js +62 -79
  35. package/dist/cramFile/container/index.js.map +1 -1
  36. package/dist/cramFile/file.d.ts +9 -13
  37. package/dist/cramFile/file.js +218 -247
  38. package/dist/cramFile/file.js.map +1 -1
  39. package/dist/cramFile/record.js +2 -2
  40. package/dist/cramFile/record.js.map +1 -1
  41. package/dist/cramFile/sectionParsers.d.ts +16 -16
  42. package/dist/cramFile/sectionParsers.js +12 -9
  43. package/dist/cramFile/sectionParsers.js.map +1 -1
  44. package/dist/cramFile/slice/decodeRecord.d.ts +3 -3
  45. package/dist/cramFile/slice/decodeRecord.js +11 -11
  46. package/dist/cramFile/slice/decodeRecord.js.map +1 -1
  47. package/dist/cramFile/slice/index.d.ts +2 -2
  48. package/dist/cramFile/slice/index.js +241 -262
  49. package/dist/cramFile/slice/index.js.map +1 -1
  50. package/dist/cramFile/util.d.ts +4 -2
  51. package/dist/cramFile/util.js +29 -6
  52. package/dist/cramFile/util.js.map +1 -1
  53. package/dist/htscodecs/arith_gen.d.ts +9 -17
  54. package/dist/htscodecs/arith_gen.js +32 -272
  55. package/dist/htscodecs/arith_gen.js.map +1 -1
  56. package/dist/htscodecs/fqzcomp.d.ts +1 -2
  57. package/dist/htscodecs/fqzcomp.js +2 -421
  58. package/dist/htscodecs/fqzcomp.js.map +1 -1
  59. package/dist/htscodecs/index.d.ts +5 -5
  60. package/dist/htscodecs/index.js +10 -10
  61. package/dist/htscodecs/index.js.map +1 -1
  62. package/dist/htscodecs/iostream.d.ts +2 -1
  63. package/dist/htscodecs/iostream.js +3 -2
  64. package/dist/htscodecs/iostream.js.map +1 -1
  65. package/dist/htscodecs/rans.d.ts +1 -2
  66. package/dist/htscodecs/rans.js +3 -270
  67. package/dist/htscodecs/rans.js.map +1 -1
  68. package/dist/htscodecs/rans4x16.d.ts +0 -1
  69. package/dist/htscodecs/rans4x16.js +6 -497
  70. package/dist/htscodecs/rans4x16.js.map +1 -1
  71. package/dist/htscodecs/tok3.js +17 -1
  72. package/dist/htscodecs/tok3.js.map +1 -1
  73. package/dist/index.d.ts +1 -1
  74. package/dist/index.js +2 -2
  75. package/dist/index.js.map +1 -1
  76. package/dist/indexedCramFile.d.ts +4 -4
  77. package/dist/indexedCramFile.js +97 -108
  78. package/dist/indexedCramFile.js.map +1 -1
  79. package/dist/io/index.d.ts +3 -3
  80. package/dist/io/index.js +6 -6
  81. package/dist/io/index.js.map +1 -1
  82. package/dist/rans/constants.d.ts +1 -1
  83. package/dist/rans/constants.js +1 -1
  84. package/dist/rans/constants.js.map +1 -1
  85. package/dist/rans/d04.js.map +1 -1
  86. package/dist/rans/decoding.js.map +1 -1
  87. package/dist/rans/frequencies.js.map +1 -1
  88. package/dist/rans/index.js +5 -5
  89. package/dist/rans/index.js.map +1 -1
  90. package/dist/unzip.d.ts +1 -1
  91. package/dist/unzip.js +5 -3
  92. package/dist/unzip.js.map +1 -1
  93. package/esm/craiIndex.js +10 -12
  94. package/esm/craiIndex.js.map +1 -1
  95. package/esm/cramFile/codecs/_base.d.ts +1 -1
  96. package/esm/cramFile/codecs/beta.d.ts +2 -2
  97. package/esm/cramFile/codecs/beta.js +1 -1
  98. package/esm/cramFile/codecs/beta.js.map +1 -1
  99. package/esm/cramFile/codecs/byteArrayLength.d.ts +2 -2
  100. package/esm/cramFile/codecs/byteArrayStop.d.ts +4 -4
  101. package/esm/cramFile/codecs/byteArrayStop.js +1 -1
  102. package/esm/cramFile/codecs/byteArrayStop.js.map +1 -1
  103. package/esm/cramFile/codecs/external.d.ts +1 -1
  104. package/esm/cramFile/codecs/external.js +1 -1
  105. package/esm/cramFile/codecs/external.js.map +1 -1
  106. package/esm/cramFile/codecs/gamma.d.ts +1 -1
  107. package/esm/cramFile/codecs/gamma.js +1 -1
  108. package/esm/cramFile/codecs/gamma.js.map +1 -1
  109. package/esm/cramFile/codecs/getBits.d.ts +1 -1
  110. package/esm/cramFile/codecs/getBits.js.map +1 -1
  111. package/esm/cramFile/codecs/huffman.d.ts +1 -1
  112. package/esm/cramFile/codecs/huffman.js +1 -1
  113. package/esm/cramFile/codecs/huffman.js.map +1 -1
  114. package/esm/cramFile/codecs/index.d.ts +1 -1
  115. package/esm/cramFile/codecs/index.js +5 -5
  116. package/esm/cramFile/codecs/index.js.map +1 -1
  117. package/esm/cramFile/codecs/subexp.d.ts +2 -2
  118. package/esm/cramFile/codecs/subexp.js +1 -1
  119. package/esm/cramFile/codecs/subexp.js.map +1 -1
  120. package/esm/cramFile/container/compressionScheme.d.ts +2 -2
  121. package/esm/cramFile/container/compressionScheme.js +1 -1
  122. package/esm/cramFile/container/compressionScheme.js.map +1 -1
  123. package/esm/cramFile/container/index.d.ts +1 -2
  124. package/esm/cramFile/container/index.js +4 -7
  125. package/esm/cramFile/container/index.js.map +1 -1
  126. package/esm/cramFile/file.d.ts +9 -13
  127. package/esm/cramFile/file.js +47 -52
  128. package/esm/cramFile/file.js.map +1 -1
  129. package/esm/cramFile/record.js +2 -2
  130. package/esm/cramFile/record.js.map +1 -1
  131. package/esm/cramFile/sectionParsers.d.ts +16 -16
  132. package/esm/cramFile/sectionParsers.js +7 -7
  133. package/esm/cramFile/sectionParsers.js.map +1 -1
  134. package/esm/cramFile/slice/decodeRecord.d.ts +3 -3
  135. package/esm/cramFile/slice/decodeRecord.js +11 -11
  136. package/esm/cramFile/slice/decodeRecord.js.map +1 -1
  137. package/esm/cramFile/slice/index.d.ts +2 -2
  138. package/esm/cramFile/slice/index.js +7 -6
  139. package/esm/cramFile/slice/index.js.map +1 -1
  140. package/esm/cramFile/util.d.ts +4 -2
  141. package/esm/cramFile/util.js +19 -2
  142. package/esm/cramFile/util.js.map +1 -1
  143. package/esm/htscodecs/arith_gen.d.ts +9 -17
  144. package/esm/htscodecs/arith_gen.js +32 -272
  145. package/esm/htscodecs/arith_gen.js.map +1 -1
  146. package/esm/htscodecs/fqzcomp.d.ts +1 -2
  147. package/esm/htscodecs/fqzcomp.js +2 -421
  148. package/esm/htscodecs/fqzcomp.js.map +1 -1
  149. package/esm/htscodecs/index.d.ts +5 -5
  150. package/esm/htscodecs/index.js +10 -10
  151. package/esm/htscodecs/index.js.map +1 -1
  152. package/esm/htscodecs/iostream.d.ts +2 -1
  153. package/esm/htscodecs/iostream.js +3 -2
  154. package/esm/htscodecs/iostream.js.map +1 -1
  155. package/esm/htscodecs/rans.d.ts +1 -2
  156. package/esm/htscodecs/rans.js +3 -270
  157. package/esm/htscodecs/rans.js.map +1 -1
  158. package/esm/htscodecs/rans4x16.d.ts +0 -1
  159. package/esm/htscodecs/rans4x16.js +6 -497
  160. package/esm/htscodecs/rans4x16.js.map +1 -1
  161. package/esm/htscodecs/tok3.js +17 -1
  162. package/esm/htscodecs/tok3.js.map +1 -1
  163. package/esm/index.d.ts +1 -1
  164. package/esm/index.js +1 -1
  165. package/esm/index.js.map +1 -1
  166. package/esm/indexedCramFile.d.ts +4 -4
  167. package/esm/indexedCramFile.js +10 -10
  168. package/esm/indexedCramFile.js.map +1 -1
  169. package/esm/io/index.d.ts +3 -3
  170. package/esm/io/index.js +2 -2
  171. package/esm/io/index.js.map +1 -1
  172. package/esm/rans/constants.d.ts +1 -1
  173. package/esm/rans/constants.js +1 -1
  174. package/esm/rans/constants.js.map +1 -1
  175. package/esm/rans/d04.js.map +1 -1
  176. package/esm/rans/decoding.js.map +1 -1
  177. package/esm/rans/frequencies.js.map +1 -1
  178. package/esm/rans/index.js +5 -5
  179. package/esm/rans/index.js.map +1 -1
  180. package/esm/unzip.d.ts +1 -1
  181. package/esm/unzip.js +4 -1
  182. package/esm/unzip.js.map +1 -1
  183. package/package.json +7 -9
  184. package/src/craiIndex.ts +17 -16
  185. package/src/cramFile/codecs/_base.ts +1 -1
  186. package/src/cramFile/codecs/beta.ts +3 -3
  187. package/src/cramFile/codecs/byteArrayLength.ts +1 -1
  188. package/src/cramFile/codecs/byteArrayStop.ts +3 -4
  189. package/src/cramFile/codecs/external.ts +3 -3
  190. package/src/cramFile/codecs/gamma.ts +2 -2
  191. package/src/cramFile/codecs/getBits.ts +1 -1
  192. package/src/cramFile/codecs/huffman.ts +2 -3
  193. package/src/cramFile/codecs/index.ts +7 -8
  194. package/src/cramFile/codecs/subexp.ts +3 -3
  195. package/src/cramFile/container/compressionScheme.ts +3 -3
  196. package/src/cramFile/container/index.ts +7 -10
  197. package/src/cramFile/file.ts +71 -77
  198. package/src/cramFile/record.ts +3 -3
  199. package/src/cramFile/sectionParsers.ts +27 -22
  200. package/src/cramFile/slice/decodeRecord.ts +17 -17
  201. package/src/cramFile/slice/index.ts +8 -9
  202. package/src/cramFile/util.ts +24 -5
  203. package/src/htscodecs/arith_gen.js +33 -296
  204. package/src/htscodecs/fqzcomp.js +2 -476
  205. package/src/htscodecs/index.js +9 -11
  206. package/src/htscodecs/iostream.js +3 -2
  207. package/src/htscodecs/rans.js +3 -315
  208. package/src/htscodecs/rans4x16.js +6 -557
  209. package/src/htscodecs/tok3.js +18 -1
  210. package/src/index.ts +1 -1
  211. package/src/indexedCramFile.ts +6 -5
  212. package/src/io/index.ts +6 -5
  213. package/src/rans/constants.ts +1 -1
  214. package/src/rans/d04.ts +0 -1
  215. package/src/rans/decoding.ts +0 -1
  216. package/src/rans/frequencies.ts +0 -1
  217. package/src/rans/index.ts +5 -7
  218. package/src/unzip.ts +5 -1
  219. package/dist/cramFile/filehandle.d.ts +0 -1
  220. package/dist/cramFile/filehandle.js +0 -3
  221. package/dist/cramFile/filehandle.js.map +0 -1
  222. package/dist/htscodecs/main_arith_gen.d.ts +0 -1
  223. package/dist/htscodecs/main_arith_gen.js +0 -86
  224. package/dist/htscodecs/main_arith_gen.js.map +0 -1
  225. package/dist/htscodecs/main_fqzcomp.d.ts +0 -1
  226. package/dist/htscodecs/main_fqzcomp.js +0 -112
  227. package/dist/htscodecs/main_fqzcomp.js.map +0 -1
  228. package/dist/htscodecs/main_rans.d.ts +0 -1
  229. package/dist/htscodecs/main_rans.js +0 -83
  230. package/dist/htscodecs/main_rans.js.map +0 -1
  231. package/dist/htscodecs/main_rans4x16.d.ts +0 -1
  232. package/dist/htscodecs/main_rans4x16.js +0 -82
  233. package/dist/htscodecs/main_rans4x16.js.map +0 -1
  234. package/dist/htscodecs/main_tok3.d.ts +0 -1
  235. package/dist/htscodecs/main_tok3.js +0 -84
  236. package/dist/htscodecs/main_tok3.js.map +0 -1
  237. package/dist/unzip-pako.d.ts +0 -2
  238. package/dist/unzip-pako.js +0 -9
  239. package/dist/unzip-pako.js.map +0 -1
  240. package/esm/cramFile/filehandle.d.ts +0 -1
  241. package/esm/cramFile/filehandle.js +0 -2
  242. package/esm/cramFile/filehandle.js.map +0 -1
  243. package/esm/htscodecs/main_arith_gen.d.ts +0 -1
  244. package/esm/htscodecs/main_arith_gen.js +0 -86
  245. package/esm/htscodecs/main_arith_gen.js.map +0 -1
  246. package/esm/htscodecs/main_fqzcomp.d.ts +0 -1
  247. package/esm/htscodecs/main_fqzcomp.js +0 -112
  248. package/esm/htscodecs/main_fqzcomp.js.map +0 -1
  249. package/esm/htscodecs/main_rans.d.ts +0 -1
  250. package/esm/htscodecs/main_rans.js +0 -83
  251. package/esm/htscodecs/main_rans.js.map +0 -1
  252. package/esm/htscodecs/main_rans4x16.d.ts +0 -1
  253. package/esm/htscodecs/main_rans4x16.js +0 -82
  254. package/esm/htscodecs/main_rans4x16.js.map +0 -1
  255. package/esm/htscodecs/main_tok3.d.ts +0 -1
  256. package/esm/htscodecs/main_tok3.js +0 -84
  257. package/esm/htscodecs/main_tok3.js.map +0 -1
  258. package/esm/unzip-pako.d.ts +0 -2
  259. package/esm/unzip-pako.js +0 -6
  260. package/esm/unzip-pako.js.map +0 -1
  261. package/src/cramFile/filehandle.ts +0 -1
  262. package/src/htscodecs/Makefile +0 -142
  263. package/src/htscodecs/README.md +0 -64
  264. package/src/htscodecs/main_arith_gen.js +0 -96
  265. package/src/htscodecs/main_fqzcomp.js +0 -113
  266. package/src/htscodecs/main_rans.js +0 -88
  267. package/src/htscodecs/main_rans4x16.js +0 -87
  268. package/src/htscodecs/main_tok3.js +0 -86
  269. 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 Buffer.allocUnsafe(n_out)
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 Buffer.allocUnsafe(n_out)
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
- // Bzip2 only for now
208
- var output = new Buffer.allocUnsafe(n_out)
209
- var bits = bzip2.array(stream.buf.slice(stream.pos))
210
- var size = bzip2.header(bits)
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
- var chunk = bzip2.decompress(bits, size)
214
- if (chunk != -1) {
215
- Buffer.from(chunk).copy(output, j)
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 != -1)
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 Buffer.allocUnsafe(n_out)
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 Buffer.allocUnsafe(n_out)
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 Buffer.allocUnsafe(len)
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 Buffer.allocUnsafe(len)
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 Buffer.allocUnsafe(len)
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