@@ -54,6 +54,11 @@ var NUMBERS = (function() {
54
54
} ) ;
55
55
return out ;
56
56
} ;
57
+ var popcnt = function ( x ) {
58
+ x -= x >> 1 & 1431655765 ;
59
+ x = ( x & 858993459 ) + ( x >> 2 & 858993459 ) ;
60
+ return ( x + ( x >> 4 ) & 252645135 ) * 16843009 >>> 24 ;
61
+ } ;
57
62
58
63
// src/proto.ts
59
64
function parse_varint49 ( buf , ptr ) {
@@ -126,12 +131,16 @@ var NUMBERS = (function() {
126
131
break ;
127
132
case 5 :
128
133
len = 4 ;
134
+ res = buf . slice ( ptr [ 0 ] , ptr [ 0 ] + len ) ;
135
+ ptr [ 0 ] += len ;
136
+ break ;
129
137
case 1 :
130
- if ( ! len )
131
- len = 8 ;
138
+ len = 8 ;
139
+ res = buf . slice ( ptr [ 0 ] , ptr [ 0 ] + len ) ;
140
+ ptr [ 0 ] += len ;
141
+ break ;
132
142
case 2 :
133
- if ( ! len )
134
- len = parse_varint49 ( buf , ptr ) ;
143
+ len = parse_varint49 ( buf , ptr ) ;
135
144
res = buf . slice ( ptr [ 0 ] , ptr [ 0 ] + len ) ;
136
145
ptr [ 0 ] += len ;
137
146
break ;
@@ -140,7 +149,7 @@ var NUMBERS = (function() {
140
149
default :
141
150
throw new Error ( "PB Type " . concat ( type , " for Field " ) . concat ( num , " at offset " ) . concat ( off ) ) ;
142
151
}
143
- var v = { offset : off , data : res } ;
152
+ var v = { offset : off , data : res , type : type } ;
144
153
if ( out [ num ] == null )
145
154
out [ num ] = [ v ] ;
146
155
else
@@ -172,14 +181,14 @@ var NUMBERS = (function() {
172
181
var t = buf [ l ++ ] ;
173
182
var len = buf [ l ] | buf [ l + 1 ] << 8 | buf [ l + 2 ] << 16 ;
174
183
l += 3 ;
175
- out . push ( process_chunk ( t , buf . slice ( l , l + len ) ) ) ;
184
+ out . push ( parse_snappy_chunk ( t , buf . slice ( l , l + len ) ) ) ;
176
185
l += len ;
177
186
}
178
187
if ( l !== buf . length )
179
188
throw new Error ( "data is not a valid framed stream!" ) ;
180
189
return u8concat ( out ) ;
181
190
}
182
- function process_chunk ( type , buf ) {
191
+ function parse_snappy_chunk ( type , buf ) {
183
192
if ( type != 0 )
184
193
throw new Error ( "Unexpected Snappy chunk type " . concat ( type ) ) ;
185
194
var ptr = [ 0 ] ;
@@ -270,6 +279,62 @@ var NUMBERS = (function() {
270
279
return out ;
271
280
}
272
281
282
+ // src/prebnccell.ts
283
+ function parseit ( buf , version ) {
284
+ var dv = u8_to_dataview ( buf ) ;
285
+ var ctype = buf [ version == 4 ? 1 : 2 ] ;
286
+ var flags = dv . getUint32 ( 4 , true ) ;
287
+ var data_offset = 12 + popcnt ( flags & 16270 ) * 4 ;
288
+ var sidx = - 1 , ieee = NaN , dt = NaN ;
289
+ if ( flags & 16 ) {
290
+ sidx = dv . getUint32 ( data_offset , true ) ;
291
+ data_offset += 4 ;
292
+ }
293
+ if ( flags & 32 ) {
294
+ ieee = dv . getFloat64 ( data_offset , true ) ;
295
+ data_offset += 8 ;
296
+ }
297
+ if ( flags & 64 ) {
298
+ dt = dv . getFloat64 ( data_offset , true ) ;
299
+ data_offset += 8 ;
300
+ }
301
+ var ret ;
302
+ switch ( ctype ) {
303
+ case 0 :
304
+ break ;
305
+ case 2 :
306
+ ret = { t : "n" , v : ieee } ;
307
+ break ;
308
+ case 3 :
309
+ ret = { t : "s" , v : sidx } ;
310
+ break ;
311
+ case 5 :
312
+ var dd = new Date ( 2001 , 0 , 1 ) ;
313
+ dd . setTime ( dd . getTime ( ) + dt * 1e3 ) ;
314
+ ret = { t : "d" , v : dd } ;
315
+ break ;
316
+ case 6 :
317
+ ret = { t : "b" , v : ieee > 0 } ;
318
+ break ;
319
+ case 7 :
320
+ ret = { t : "n" , v : ieee } ;
321
+ break ;
322
+ default :
323
+ throw new Error ( "Unsupported cell type " . concat ( buf . slice ( 0 , 4 ) ) ) ;
324
+ }
325
+ return ret ;
326
+ }
327
+ function parse ( buf ) {
328
+ var version = buf [ 0 ] ;
329
+ switch ( version ) {
330
+ case 3 :
331
+ case 4 :
332
+ return parseit ( buf , version ) ;
333
+ default :
334
+ throw new Error ( "Unsupported pre-BNC version " . concat ( version ) ) ;
335
+ }
336
+ }
337
+
273
338
// src/numbers.ts
274
339
var encode_col = function ( C ) {
275
340
var s = "" ;
@@ -343,7 +408,7 @@ var NUMBERS = (function() {
343
408
var pb = parse_shallow ( root . data ) ;
344
409
var entries = pb [ 3 ] ;
345
410
var data = [ ] ;
346
- entries == null ? void 0 : entries . forEach ( function ( entry ) {
411
+ ( entries || [ ] ) . forEach ( function ( entry ) {
347
412
var le = parse_shallow ( entry . data ) ;
348
413
var key = varint_to_i32 ( le [ 1 ] [ 0 ] . data ) >>> 0 ;
349
414
data [ key ] = u8str ( le [ 3 ] [ 0 ] . data ) ;
@@ -405,50 +470,12 @@ var NUMBERS = (function() {
405
470
tiles . forEach ( function ( tile2 ) {
406
471
tile2 . ref . forEach ( function ( row , R ) {
407
472
row . forEach ( function ( buf , C ) {
408
- var dv = u8_to_dataview ( buf ) ;
409
- var ctype = buf [ 2 ] ;
410
473
var addr = encode_cell ( { r : R , c : C } ) ;
411
- switch ( ctype ) {
412
- case 0 :
413
- {
414
- switch ( buf [ 1 ] ) {
415
- case 3 :
416
- ws [ addr ] = { t : "s" , v : sst [ dv . getUint32 ( buf . length - 4 , true ) ] } ;
417
- break ;
418
- case 2 :
419
- ws [ addr ] = { t : "n" , v : dv . getFloat64 ( 16 , true ) } ;
420
- break ;
421
- case 0 :
422
- break ;
423
- case 5 :
424
- break ;
425
- case 7 :
426
- break ;
427
- case 6 :
428
- ws [ addr ] = { t : "b" , v : dv . getFloat64 ( buf . length - 8 , true ) > 0 } ;
429
- break ;
430
- default :
431
- throw new Error ( "Unsupported cell type " . concat ( buf . slice ( 0 , 4 ) ) ) ;
432
- }
433
- }
434
- break ;
435
- case 3 :
436
- {
437
- ws [ addr ] = { t : "s" , v : sst [ dv . getUint32 ( 16 , true ) ] } ;
438
- }
439
- break ;
440
- case 2 :
441
- {
442
- ws [ addr ] = { t : "n" , v : dv . getFloat64 ( buf . length - 12 , true ) } ;
443
- }
444
- break ;
445
- case 6 :
446
- {
447
- ws [ addr ] = { t : "b" , v : dv . getFloat64 ( 16 , true ) > 0 } ;
448
- }
449
- break ;
450
- default :
451
- throw new Error ( "Unsupported cell type " . concat ( ctype ) ) ;
474
+ var res = parse ( buf ) ;
475
+ if ( res ) {
476
+ ws [ addr ] = res ;
477
+ if ( res . t == "s" && typeof res . v == "number" )
478
+ res . v = sst [ res . v ] ;
452
479
}
453
480
} ) ;
454
481
} ) ;
0 commit comments