@@ -36,28 +36,26 @@ function keyValToBuffer(keyVal) {
3636 return buffer ;
3737}
3838exports . keyValToBuffer = keyValToBuffer ;
39- // https://github.com/feross/buffer/blob/master/index.js#L1127
40- function verifuint ( value , max ) {
41- if ( typeof value !== 'number' )
42- throw new Error ( 'cannot write a non-number as a number' ) ;
39+ function verifuint64 ( value ) {
40+ if ( typeof value !== 'bigint' )
41+ throw new Error ( 'cannot write a non-bigint as a number' ) ;
4342 if ( value < 0 )
4443 throw new Error ( 'specified a negative value for writing an unsigned value' ) ;
45- if ( value > max ) throw new Error ( 'RangeError: value out of range' ) ;
46- if ( Math . floor ( value ) !== value )
47- throw new Error ( 'value has a fractional component' ) ;
44+ if ( value > 0xffffffffffffffff )
45+ throw new Error ( 'RangeError: value out of range' ) ;
4846}
4947function readUInt64LE ( buffer , offset ) {
50- const a = buffer . readUInt32LE ( offset ) ;
51- let b = buffer . readUInt32LE ( offset + 4 ) ;
52- b *= 0x100000000 ;
53- verifuint ( b + a , 0x001fffffffffffff ) ;
48+ const a = BigInt ( buffer . readUInt32LE ( offset ) ) ;
49+ let b = BigInt ( buffer . readUInt32LE ( offset + 4 ) ) ;
50+ b *= BigInt ( 0x100000000 ) ;
51+ verifuint64 ( b + a ) ;
5452 return b + a ;
5553}
5654exports . readUInt64LE = readUInt64LE ;
5755function writeUInt64LE ( buffer , value , offset ) {
58- verifuint ( value , 0x001fffffffffffff ) ;
59- buffer . writeInt32LE ( value & - 1 , offset ) ;
60- buffer . writeUInt32LE ( Math . floor ( value / 0x100000000 ) , offset + 4 ) ;
56+ verifuint64 ( value ) ;
57+ buffer . writeUInt32LE ( Number ( value & BigInt ( 0xffffffff ) ) , offset ) ;
58+ buffer . writeUInt32LE ( Number ( value / BigInt ( 0x100000000 ) ) , offset + 4 ) ;
6159 return offset + 8 ;
6260}
6361exports . writeUInt64LE = writeUInt64LE ;
0 commit comments