2323 */
2424
2525( function ( global , undefined ) { "use strict" ;
26- var POW_2_24 = 5.960464477539063e-8 ,
27- POW_2_32 = 4294967296 ,
28- POW_2_53 = 9007199254740992 ;
26+ const POW_2_24 = 5.960464477539063e-8 ;
27+ const POW_2_32 = 4294967296 ;
28+ const POW_2_53 = 9007199254740992 ;
29+ const DECODE_CHUNK_SIZE = 8192 ;
2930
3031function encode ( value ) {
3132 var data = new ArrayBuffer ( 256 ) ;
3233 var dataView = new DataView ( data ) ;
34+ var byteView = new Uint8Array ( data ) ;
3335 var lastLength ;
3436 var offset = 0 ;
3537
@@ -42,6 +44,7 @@ function encode(value) {
4244 var oldDataView = dataView ;
4345 data = new ArrayBuffer ( newByteLength ) ;
4446 dataView = new DataView ( data ) ;
47+ byteView = new Uint8Array ( data ) ;
4548 var uint32count = ( offset + 3 ) >> 2 ;
4649 for ( var i = 0 ; i < uint32count ; ++ i )
4750 dataView . setUint32 ( i << 2 , oldDataView . getUint32 ( i << 2 ) ) ;
@@ -60,9 +63,8 @@ function encode(value) {
6063 commitWrite ( prepareWrite ( 1 ) . setUint8 ( offset , value ) ) ;
6164 }
6265 function writeUint8Array ( value ) {
63- var dataView = prepareWrite ( value . length ) ;
64- for ( var i = 0 ; i < value . length ; ++ i )
65- dataView . setUint8 ( offset + i , value [ i ] ) ;
66+ prepareWrite ( value . length ) ;
67+ byteView . set ( value , offset ) ;
6668 commitWrite ( ) ;
6769 }
6870 function writeUint16 ( value ) {
@@ -350,7 +352,14 @@ function decode(data, tagger, simpleValue) {
350352 appendUtf16Data ( utf16data , length ) ;
351353 } else
352354 appendUtf16Data ( utf16data , length ) ;
353- return String . fromCharCode . apply ( null , utf16data ) ;
355+ var string = "" ;
356+ for ( i = 0 ; i < utf16data . length ; i += DECODE_CHUNK_SIZE ) {
357+ string += String . fromCharCode . apply (
358+ null ,
359+ utf16data . slice ( i , i + DECODE_CHUNK_SIZE )
360+ ) ;
361+ }
362+ return string ;
354363 case 4 :
355364 var retArray ;
356365 if ( length < 0 ) {
0 commit comments