You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					1233 lines
				
				44 KiB
			
		
		
			
		
	
	
					1233 lines
				
				44 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								"use strict";
							 | 
						||
| 
								 | 
							
								Object.defineProperty(exports, "__esModule", { value: true });
							 | 
						||
| 
								 | 
							
								const utils_1 = require("./utils");
							 | 
						||
| 
								 | 
							
								// The default Buffer size if one is not provided.
							 | 
						||
| 
								 | 
							
								const DEFAULT_SMARTBUFFER_SIZE = 4096;
							 | 
						||
| 
								 | 
							
								// The default string encoding to use for reading/writing strings.
							 | 
						||
| 
								 | 
							
								const DEFAULT_SMARTBUFFER_ENCODING = 'utf8';
							 | 
						||
| 
								 | 
							
								class SmartBuffer {
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Creates a new SmartBuffer instance.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param options { SmartBufferOptions } The SmartBufferOptions to apply to this instance.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    constructor(options) {
							 | 
						||
| 
								 | 
							
								        this.length = 0;
							 | 
						||
| 
								 | 
							
								        this._encoding = DEFAULT_SMARTBUFFER_ENCODING;
							 | 
						||
| 
								 | 
							
								        this._writeOffset = 0;
							 | 
						||
| 
								 | 
							
								        this._readOffset = 0;
							 | 
						||
| 
								 | 
							
								        if (SmartBuffer.isSmartBufferOptions(options)) {
							 | 
						||
| 
								 | 
							
								            // Checks for encoding
							 | 
						||
| 
								 | 
							
								            if (options.encoding) {
							 | 
						||
| 
								 | 
							
								                utils_1.checkEncoding(options.encoding);
							 | 
						||
| 
								 | 
							
								                this._encoding = options.encoding;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            // Checks for initial size length
							 | 
						||
| 
								 | 
							
								            if (options.size) {
							 | 
						||
| 
								 | 
							
								                if (utils_1.isFiniteInteger(options.size) && options.size > 0) {
							 | 
						||
| 
								 | 
							
								                    this._buff = Buffer.allocUnsafe(options.size);
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								                else {
							 | 
						||
| 
								 | 
							
								                    throw new Error(utils_1.ERRORS.INVALID_SMARTBUFFER_SIZE);
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								                // Check for initial Buffer
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            else if (options.buff) {
							 | 
						||
| 
								 | 
							
								                if (Buffer.isBuffer(options.buff)) {
							 | 
						||
| 
								 | 
							
								                    this._buff = options.buff;
							 | 
						||
| 
								 | 
							
								                    this.length = options.buff.length;
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								                else {
							 | 
						||
| 
								 | 
							
								                    throw new Error(utils_1.ERRORS.INVALID_SMARTBUFFER_BUFFER);
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            else {
							 | 
						||
| 
								 | 
							
								                this._buff = Buffer.allocUnsafe(DEFAULT_SMARTBUFFER_SIZE);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        else {
							 | 
						||
| 
								 | 
							
								            // If something was passed but it's not a SmartBufferOptions object
							 | 
						||
| 
								 | 
							
								            if (typeof options !== 'undefined') {
							 | 
						||
| 
								 | 
							
								                throw new Error(utils_1.ERRORS.INVALID_SMARTBUFFER_OBJECT);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            // Otherwise default to sane options
							 | 
						||
| 
								 | 
							
								            this._buff = Buffer.allocUnsafe(DEFAULT_SMARTBUFFER_SIZE);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Creates a new SmartBuffer instance with the provided internal Buffer size and optional encoding.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param size { Number } The size of the internal Buffer.
							 | 
						||
| 
								 | 
							
								     * @param encoding { String } The BufferEncoding to use for strings.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return { SmartBuffer }
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    static fromSize(size, encoding) {
							 | 
						||
| 
								 | 
							
								        return new this({
							 | 
						||
| 
								 | 
							
								            size: size,
							 | 
						||
| 
								 | 
							
								            encoding: encoding
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Creates a new SmartBuffer instance with the provided Buffer and optional encoding.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param buffer { Buffer } The Buffer to use as the internal Buffer value.
							 | 
						||
| 
								 | 
							
								     * @param encoding { String } The BufferEncoding to use for strings.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return { SmartBuffer }
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    static fromBuffer(buff, encoding) {
							 | 
						||
| 
								 | 
							
								        return new this({
							 | 
						||
| 
								 | 
							
								            buff: buff,
							 | 
						||
| 
								 | 
							
								            encoding: encoding
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Creates a new SmartBuffer instance with the provided SmartBufferOptions options.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param options { SmartBufferOptions } The options to use when creating the SmartBuffer instance.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    static fromOptions(options) {
							 | 
						||
| 
								 | 
							
								        return new this(options);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Type checking function that determines if an object is a SmartBufferOptions object.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    static isSmartBufferOptions(options) {
							 | 
						||
| 
								 | 
							
								        const castOptions = options;
							 | 
						||
| 
								 | 
							
								        return (castOptions &&
							 | 
						||
| 
								 | 
							
								            (castOptions.encoding !== undefined || castOptions.size !== undefined || castOptions.buff !== undefined));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    // Signed integers
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Reads an Int8 value from the current read position or an optionally provided offset.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to read data from (optional)
							 | 
						||
| 
								 | 
							
								     * @return { Number }
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    readInt8(offset) {
							 | 
						||
| 
								 | 
							
								        return this._readNumberValue(Buffer.prototype.readInt8, 1, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Reads an Int16BE value from the current read position or an optionally provided offset.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to read data from (optional)
							 | 
						||
| 
								 | 
							
								     * @return { Number }
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    readInt16BE(offset) {
							 | 
						||
| 
								 | 
							
								        return this._readNumberValue(Buffer.prototype.readInt16BE, 2, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Reads an Int16LE value from the current read position or an optionally provided offset.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to read data from (optional)
							 | 
						||
| 
								 | 
							
								     * @return { Number }
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    readInt16LE(offset) {
							 | 
						||
| 
								 | 
							
								        return this._readNumberValue(Buffer.prototype.readInt16LE, 2, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Reads an Int32BE value from the current read position or an optionally provided offset.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to read data from (optional)
							 | 
						||
| 
								 | 
							
								     * @return { Number }
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    readInt32BE(offset) {
							 | 
						||
| 
								 | 
							
								        return this._readNumberValue(Buffer.prototype.readInt32BE, 4, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Reads an Int32LE value from the current read position or an optionally provided offset.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to read data from (optional)
							 | 
						||
| 
								 | 
							
								     * @return { Number }
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    readInt32LE(offset) {
							 | 
						||
| 
								 | 
							
								        return this._readNumberValue(Buffer.prototype.readInt32LE, 4, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Reads a BigInt64BE value from the current read position or an optionally provided offset.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to read data from (optional)
							 | 
						||
| 
								 | 
							
								     * @return { BigInt }
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    readBigInt64BE(offset) {
							 | 
						||
| 
								 | 
							
								        utils_1.bigIntAndBufferInt64Check('readBigInt64BE');
							 | 
						||
| 
								 | 
							
								        return this._readNumberValue(Buffer.prototype.readBigInt64BE, 8, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Reads a BigInt64LE value from the current read position or an optionally provided offset.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to read data from (optional)
							 | 
						||
| 
								 | 
							
								     * @return { BigInt }
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    readBigInt64LE(offset) {
							 | 
						||
| 
								 | 
							
								        utils_1.bigIntAndBufferInt64Check('readBigInt64LE');
							 | 
						||
| 
								 | 
							
								        return this._readNumberValue(Buffer.prototype.readBigInt64LE, 8, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Writes an Int8 value to the current write position (or at optional offset).
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Number } The value to write.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to write the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    writeInt8(value, offset) {
							 | 
						||
| 
								 | 
							
								        this._writeNumberValue(Buffer.prototype.writeInt8, 1, value, offset);
							 | 
						||
| 
								 | 
							
								        return this;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Inserts an Int8 value at the given offset value.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Number } The value to insert.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to insert the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    insertInt8(value, offset) {
							 | 
						||
| 
								 | 
							
								        return this._insertNumberValue(Buffer.prototype.writeInt8, 1, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Writes an Int16BE value to the current write position (or at optional offset).
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Number } The value to write.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to write the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    writeInt16BE(value, offset) {
							 | 
						||
| 
								 | 
							
								        return this._writeNumberValue(Buffer.prototype.writeInt16BE, 2, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Inserts an Int16BE value at the given offset value.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Number } The value to insert.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to insert the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    insertInt16BE(value, offset) {
							 | 
						||
| 
								 | 
							
								        return this._insertNumberValue(Buffer.prototype.writeInt16BE, 2, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Writes an Int16LE value to the current write position (or at optional offset).
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Number } The value to write.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to write the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    writeInt16LE(value, offset) {
							 | 
						||
| 
								 | 
							
								        return this._writeNumberValue(Buffer.prototype.writeInt16LE, 2, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Inserts an Int16LE value at the given offset value.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Number } The value to insert.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to insert the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    insertInt16LE(value, offset) {
							 | 
						||
| 
								 | 
							
								        return this._insertNumberValue(Buffer.prototype.writeInt16LE, 2, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Writes an Int32BE value to the current write position (or at optional offset).
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Number } The value to write.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to write the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    writeInt32BE(value, offset) {
							 | 
						||
| 
								 | 
							
								        return this._writeNumberValue(Buffer.prototype.writeInt32BE, 4, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Inserts an Int32BE value at the given offset value.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Number } The value to insert.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to insert the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    insertInt32BE(value, offset) {
							 | 
						||
| 
								 | 
							
								        return this._insertNumberValue(Buffer.prototype.writeInt32BE, 4, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Writes an Int32LE value to the current write position (or at optional offset).
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Number } The value to write.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to write the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    writeInt32LE(value, offset) {
							 | 
						||
| 
								 | 
							
								        return this._writeNumberValue(Buffer.prototype.writeInt32LE, 4, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Inserts an Int32LE value at the given offset value.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Number } The value to insert.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to insert the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    insertInt32LE(value, offset) {
							 | 
						||
| 
								 | 
							
								        return this._insertNumberValue(Buffer.prototype.writeInt32LE, 4, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Writes a BigInt64BE value to the current write position (or at optional offset).
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { BigInt } The value to write.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to write the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    writeBigInt64BE(value, offset) {
							 | 
						||
| 
								 | 
							
								        utils_1.bigIntAndBufferInt64Check('writeBigInt64BE');
							 | 
						||
| 
								 | 
							
								        return this._writeNumberValue(Buffer.prototype.writeBigInt64BE, 8, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Inserts a BigInt64BE value at the given offset value.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { BigInt } The value to insert.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to insert the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    insertBigInt64BE(value, offset) {
							 | 
						||
| 
								 | 
							
								        utils_1.bigIntAndBufferInt64Check('writeBigInt64BE');
							 | 
						||
| 
								 | 
							
								        return this._insertNumberValue(Buffer.prototype.writeBigInt64BE, 8, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Writes a BigInt64LE value to the current write position (or at optional offset).
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { BigInt } The value to write.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to write the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    writeBigInt64LE(value, offset) {
							 | 
						||
| 
								 | 
							
								        utils_1.bigIntAndBufferInt64Check('writeBigInt64LE');
							 | 
						||
| 
								 | 
							
								        return this._writeNumberValue(Buffer.prototype.writeBigInt64LE, 8, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Inserts a Int64LE value at the given offset value.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { BigInt } The value to insert.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to insert the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    insertBigInt64LE(value, offset) {
							 | 
						||
| 
								 | 
							
								        utils_1.bigIntAndBufferInt64Check('writeBigInt64LE');
							 | 
						||
| 
								 | 
							
								        return this._insertNumberValue(Buffer.prototype.writeBigInt64LE, 8, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    // Unsigned Integers
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Reads an UInt8 value from the current read position or an optionally provided offset.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to read data from (optional)
							 | 
						||
| 
								 | 
							
								     * @return { Number }
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    readUInt8(offset) {
							 | 
						||
| 
								 | 
							
								        return this._readNumberValue(Buffer.prototype.readUInt8, 1, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Reads an UInt16BE value from the current read position or an optionally provided offset.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to read data from (optional)
							 | 
						||
| 
								 | 
							
								     * @return { Number }
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    readUInt16BE(offset) {
							 | 
						||
| 
								 | 
							
								        return this._readNumberValue(Buffer.prototype.readUInt16BE, 2, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Reads an UInt16LE value from the current read position or an optionally provided offset.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to read data from (optional)
							 | 
						||
| 
								 | 
							
								     * @return { Number }
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    readUInt16LE(offset) {
							 | 
						||
| 
								 | 
							
								        return this._readNumberValue(Buffer.prototype.readUInt16LE, 2, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Reads an UInt32BE value from the current read position or an optionally provided offset.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to read data from (optional)
							 | 
						||
| 
								 | 
							
								     * @return { Number }
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    readUInt32BE(offset) {
							 | 
						||
| 
								 | 
							
								        return this._readNumberValue(Buffer.prototype.readUInt32BE, 4, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Reads an UInt32LE value from the current read position or an optionally provided offset.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to read data from (optional)
							 | 
						||
| 
								 | 
							
								     * @return { Number }
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    readUInt32LE(offset) {
							 | 
						||
| 
								 | 
							
								        return this._readNumberValue(Buffer.prototype.readUInt32LE, 4, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Reads a BigUInt64BE value from the current read position or an optionally provided offset.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to read data from (optional)
							 | 
						||
| 
								 | 
							
								     * @return { BigInt }
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    readBigUInt64BE(offset) {
							 | 
						||
| 
								 | 
							
								        utils_1.bigIntAndBufferInt64Check('readBigUInt64BE');
							 | 
						||
| 
								 | 
							
								        return this._readNumberValue(Buffer.prototype.readBigUInt64BE, 8, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Reads a BigUInt64LE value from the current read position or an optionally provided offset.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to read data from (optional)
							 | 
						||
| 
								 | 
							
								     * @return { BigInt }
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    readBigUInt64LE(offset) {
							 | 
						||
| 
								 | 
							
								        utils_1.bigIntAndBufferInt64Check('readBigUInt64LE');
							 | 
						||
| 
								 | 
							
								        return this._readNumberValue(Buffer.prototype.readBigUInt64LE, 8, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Writes an UInt8 value to the current write position (or at optional offset).
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Number } The value to write.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to write the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    writeUInt8(value, offset) {
							 | 
						||
| 
								 | 
							
								        return this._writeNumberValue(Buffer.prototype.writeUInt8, 1, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Inserts an UInt8 value at the given offset value.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Number } The value to insert.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to insert the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    insertUInt8(value, offset) {
							 | 
						||
| 
								 | 
							
								        return this._insertNumberValue(Buffer.prototype.writeUInt8, 1, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Writes an UInt16BE value to the current write position (or at optional offset).
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Number } The value to write.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to write the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    writeUInt16BE(value, offset) {
							 | 
						||
| 
								 | 
							
								        return this._writeNumberValue(Buffer.prototype.writeUInt16BE, 2, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Inserts an UInt16BE value at the given offset value.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Number } The value to insert.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to insert the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    insertUInt16BE(value, offset) {
							 | 
						||
| 
								 | 
							
								        return this._insertNumberValue(Buffer.prototype.writeUInt16BE, 2, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Writes an UInt16LE value to the current write position (or at optional offset).
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Number } The value to write.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to write the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    writeUInt16LE(value, offset) {
							 | 
						||
| 
								 | 
							
								        return this._writeNumberValue(Buffer.prototype.writeUInt16LE, 2, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Inserts an UInt16LE value at the given offset value.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Number } The value to insert.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to insert the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    insertUInt16LE(value, offset) {
							 | 
						||
| 
								 | 
							
								        return this._insertNumberValue(Buffer.prototype.writeUInt16LE, 2, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Writes an UInt32BE value to the current write position (or at optional offset).
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Number } The value to write.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to write the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    writeUInt32BE(value, offset) {
							 | 
						||
| 
								 | 
							
								        return this._writeNumberValue(Buffer.prototype.writeUInt32BE, 4, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Inserts an UInt32BE value at the given offset value.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Number } The value to insert.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to insert the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    insertUInt32BE(value, offset) {
							 | 
						||
| 
								 | 
							
								        return this._insertNumberValue(Buffer.prototype.writeUInt32BE, 4, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Writes an UInt32LE value to the current write position (or at optional offset).
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Number } The value to write.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to write the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    writeUInt32LE(value, offset) {
							 | 
						||
| 
								 | 
							
								        return this._writeNumberValue(Buffer.prototype.writeUInt32LE, 4, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Inserts an UInt32LE value at the given offset value.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Number } The value to insert.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to insert the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    insertUInt32LE(value, offset) {
							 | 
						||
| 
								 | 
							
								        return this._insertNumberValue(Buffer.prototype.writeUInt32LE, 4, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Writes a BigUInt64BE value to the current write position (or at optional offset).
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Number } The value to write.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to write the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    writeBigUInt64BE(value, offset) {
							 | 
						||
| 
								 | 
							
								        utils_1.bigIntAndBufferInt64Check('writeBigUInt64BE');
							 | 
						||
| 
								 | 
							
								        return this._writeNumberValue(Buffer.prototype.writeBigUInt64BE, 8, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Inserts a BigUInt64BE value at the given offset value.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Number } The value to insert.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to insert the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    insertBigUInt64BE(value, offset) {
							 | 
						||
| 
								 | 
							
								        utils_1.bigIntAndBufferInt64Check('writeBigUInt64BE');
							 | 
						||
| 
								 | 
							
								        return this._insertNumberValue(Buffer.prototype.writeBigUInt64BE, 8, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Writes a BigUInt64LE value to the current write position (or at optional offset).
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Number } The value to write.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to write the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    writeBigUInt64LE(value, offset) {
							 | 
						||
| 
								 | 
							
								        utils_1.bigIntAndBufferInt64Check('writeBigUInt64LE');
							 | 
						||
| 
								 | 
							
								        return this._writeNumberValue(Buffer.prototype.writeBigUInt64LE, 8, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Inserts a BigUInt64LE value at the given offset value.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Number } The value to insert.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to insert the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    insertBigUInt64LE(value, offset) {
							 | 
						||
| 
								 | 
							
								        utils_1.bigIntAndBufferInt64Check('writeBigUInt64LE');
							 | 
						||
| 
								 | 
							
								        return this._insertNumberValue(Buffer.prototype.writeBigUInt64LE, 8, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    // Floating Point
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Reads an FloatBE value from the current read position or an optionally provided offset.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to read data from (optional)
							 | 
						||
| 
								 | 
							
								     * @return { Number }
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    readFloatBE(offset) {
							 | 
						||
| 
								 | 
							
								        return this._readNumberValue(Buffer.prototype.readFloatBE, 4, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Reads an FloatLE value from the current read position or an optionally provided offset.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to read data from (optional)
							 | 
						||
| 
								 | 
							
								     * @return { Number }
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    readFloatLE(offset) {
							 | 
						||
| 
								 | 
							
								        return this._readNumberValue(Buffer.prototype.readFloatLE, 4, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Writes a FloatBE value to the current write position (or at optional offset).
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Number } The value to write.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to write the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    writeFloatBE(value, offset) {
							 | 
						||
| 
								 | 
							
								        return this._writeNumberValue(Buffer.prototype.writeFloatBE, 4, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Inserts a FloatBE value at the given offset value.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Number } The value to insert.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to insert the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    insertFloatBE(value, offset) {
							 | 
						||
| 
								 | 
							
								        return this._insertNumberValue(Buffer.prototype.writeFloatBE, 4, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Writes a FloatLE value to the current write position (or at optional offset).
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Number } The value to write.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to write the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    writeFloatLE(value, offset) {
							 | 
						||
| 
								 | 
							
								        return this._writeNumberValue(Buffer.prototype.writeFloatLE, 4, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Inserts a FloatLE value at the given offset value.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Number } The value to insert.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to insert the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    insertFloatLE(value, offset) {
							 | 
						||
| 
								 | 
							
								        return this._insertNumberValue(Buffer.prototype.writeFloatLE, 4, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    // Double Floating Point
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Reads an DoublEBE value from the current read position or an optionally provided offset.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to read data from (optional)
							 | 
						||
| 
								 | 
							
								     * @return { Number }
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    readDoubleBE(offset) {
							 | 
						||
| 
								 | 
							
								        return this._readNumberValue(Buffer.prototype.readDoubleBE, 8, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Reads an DoubleLE value from the current read position or an optionally provided offset.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to read data from (optional)
							 | 
						||
| 
								 | 
							
								     * @return { Number }
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    readDoubleLE(offset) {
							 | 
						||
| 
								 | 
							
								        return this._readNumberValue(Buffer.prototype.readDoubleLE, 8, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Writes a DoubleBE value to the current write position (or at optional offset).
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Number } The value to write.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to write the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    writeDoubleBE(value, offset) {
							 | 
						||
| 
								 | 
							
								        return this._writeNumberValue(Buffer.prototype.writeDoubleBE, 8, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Inserts a DoubleBE value at the given offset value.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Number } The value to insert.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to insert the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    insertDoubleBE(value, offset) {
							 | 
						||
| 
								 | 
							
								        return this._insertNumberValue(Buffer.prototype.writeDoubleBE, 8, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Writes a DoubleLE value to the current write position (or at optional offset).
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Number } The value to write.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to write the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    writeDoubleLE(value, offset) {
							 | 
						||
| 
								 | 
							
								        return this._writeNumberValue(Buffer.prototype.writeDoubleLE, 8, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Inserts a DoubleLE value at the given offset value.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Number } The value to insert.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to insert the value at.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    insertDoubleLE(value, offset) {
							 | 
						||
| 
								 | 
							
								        return this._insertNumberValue(Buffer.prototype.writeDoubleLE, 8, value, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    // Strings
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Reads a String from the current read position.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param arg1 { Number | String } The number of bytes to read as a String, or the BufferEncoding to use for
							 | 
						||
| 
								 | 
							
								     *             the string (Defaults to instance level encoding).
							 | 
						||
| 
								 | 
							
								     * @param encoding { String } The BufferEncoding to use for the string (Defaults to instance level encoding).
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return { String }
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    readString(arg1, encoding) {
							 | 
						||
| 
								 | 
							
								        let lengthVal;
							 | 
						||
| 
								 | 
							
								        // Length provided
							 | 
						||
| 
								 | 
							
								        if (typeof arg1 === 'number') {
							 | 
						||
| 
								 | 
							
								            utils_1.checkLengthValue(arg1);
							 | 
						||
| 
								 | 
							
								            lengthVal = Math.min(arg1, this.length - this._readOffset);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        else {
							 | 
						||
| 
								 | 
							
								            encoding = arg1;
							 | 
						||
| 
								 | 
							
								            lengthVal = this.length - this._readOffset;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        // Check encoding
							 | 
						||
| 
								 | 
							
								        if (typeof encoding !== 'undefined') {
							 | 
						||
| 
								 | 
							
								            utils_1.checkEncoding(encoding);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        const value = this._buff.slice(this._readOffset, this._readOffset + lengthVal).toString(encoding || this._encoding);
							 | 
						||
| 
								 | 
							
								        this._readOffset += lengthVal;
							 | 
						||
| 
								 | 
							
								        return value;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Inserts a String
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { String } The String value to insert.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to insert the string at.
							 | 
						||
| 
								 | 
							
								     * @param encoding { String } The BufferEncoding to use for writing strings (defaults to instance encoding).
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    insertString(value, offset, encoding) {
							 | 
						||
| 
								 | 
							
								        utils_1.checkOffsetValue(offset);
							 | 
						||
| 
								 | 
							
								        return this._handleString(value, true, offset, encoding);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Writes a String
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { String } The String value to write.
							 | 
						||
| 
								 | 
							
								     * @param arg2 { Number | String } The offset to write the string at, or the BufferEncoding to use.
							 | 
						||
| 
								 | 
							
								     * @param encoding { String } The BufferEncoding to use for writing strings (defaults to instance encoding).
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    writeString(value, arg2, encoding) {
							 | 
						||
| 
								 | 
							
								        return this._handleString(value, false, arg2, encoding);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Reads a null-terminated String from the current read position.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param encoding { String } The BufferEncoding to use for the string (Defaults to instance level encoding).
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return { String }
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    readStringNT(encoding) {
							 | 
						||
| 
								 | 
							
								        if (typeof encoding !== 'undefined') {
							 | 
						||
| 
								 | 
							
								            utils_1.checkEncoding(encoding);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        // Set null character position to the end SmartBuffer instance.
							 | 
						||
| 
								 | 
							
								        let nullPos = this.length;
							 | 
						||
| 
								 | 
							
								        // Find next null character (if one is not found, default from above is used)
							 | 
						||
| 
								 | 
							
								        for (let i = this._readOffset; i < this.length; i++) {
							 | 
						||
| 
								 | 
							
								            if (this._buff[i] === 0x00) {
							 | 
						||
| 
								 | 
							
								                nullPos = i;
							 | 
						||
| 
								 | 
							
								                break;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        // Read string value
							 | 
						||
| 
								 | 
							
								        const value = this._buff.slice(this._readOffset, nullPos);
							 | 
						||
| 
								 | 
							
								        // Increment internal Buffer read offset
							 | 
						||
| 
								 | 
							
								        this._readOffset = nullPos + 1;
							 | 
						||
| 
								 | 
							
								        return value.toString(encoding || this._encoding);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Inserts a null-terminated String.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { String } The String value to write.
							 | 
						||
| 
								 | 
							
								     * @param arg2 { Number | String } The offset to write the string to, or the BufferEncoding to use.
							 | 
						||
| 
								 | 
							
								     * @param encoding { String } The BufferEncoding to use for writing strings (defaults to instance encoding).
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    insertStringNT(value, offset, encoding) {
							 | 
						||
| 
								 | 
							
								        utils_1.checkOffsetValue(offset);
							 | 
						||
| 
								 | 
							
								        // Write Values
							 | 
						||
| 
								 | 
							
								        this.insertString(value, offset, encoding);
							 | 
						||
| 
								 | 
							
								        this.insertUInt8(0x00, offset + value.length);
							 | 
						||
| 
								 | 
							
								        return this;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Writes a null-terminated String.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { String } The String value to write.
							 | 
						||
| 
								 | 
							
								     * @param arg2 { Number | String } The offset to write the string to, or the BufferEncoding to use.
							 | 
						||
| 
								 | 
							
								     * @param encoding { String } The BufferEncoding to use for writing strings (defaults to instance encoding).
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    writeStringNT(value, arg2, encoding) {
							 | 
						||
| 
								 | 
							
								        // Write Values
							 | 
						||
| 
								 | 
							
								        this.writeString(value, arg2, encoding);
							 | 
						||
| 
								 | 
							
								        this.writeUInt8(0x00, typeof arg2 === 'number' ? arg2 + value.length : this.writeOffset);
							 | 
						||
| 
								 | 
							
								        return this;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    // Buffers
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Reads a Buffer from the internal read position.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param length { Number } The length of data to read as a Buffer.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return { Buffer }
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    readBuffer(length) {
							 | 
						||
| 
								 | 
							
								        if (typeof length !== 'undefined') {
							 | 
						||
| 
								 | 
							
								            utils_1.checkLengthValue(length);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        const lengthVal = typeof length === 'number' ? length : this.length;
							 | 
						||
| 
								 | 
							
								        const endPoint = Math.min(this.length, this._readOffset + lengthVal);
							 | 
						||
| 
								 | 
							
								        // Read buffer value
							 | 
						||
| 
								 | 
							
								        const value = this._buff.slice(this._readOffset, endPoint);
							 | 
						||
| 
								 | 
							
								        // Increment internal Buffer read offset
							 | 
						||
| 
								 | 
							
								        this._readOffset = endPoint;
							 | 
						||
| 
								 | 
							
								        return value;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Writes a Buffer to the current write position.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Buffer } The Buffer to write.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to write the Buffer to.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    insertBuffer(value, offset) {
							 | 
						||
| 
								 | 
							
								        utils_1.checkOffsetValue(offset);
							 | 
						||
| 
								 | 
							
								        return this._handleBuffer(value, true, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Writes a Buffer to the current write position.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Buffer } The Buffer to write.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to write the Buffer to.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    writeBuffer(value, offset) {
							 | 
						||
| 
								 | 
							
								        return this._handleBuffer(value, false, offset);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Reads a null-terminated Buffer from the current read poisiton.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return { Buffer }
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    readBufferNT() {
							 | 
						||
| 
								 | 
							
								        // Set null character position to the end SmartBuffer instance.
							 | 
						||
| 
								 | 
							
								        let nullPos = this.length;
							 | 
						||
| 
								 | 
							
								        // Find next null character (if one is not found, default from above is used)
							 | 
						||
| 
								 | 
							
								        for (let i = this._readOffset; i < this.length; i++) {
							 | 
						||
| 
								 | 
							
								            if (this._buff[i] === 0x00) {
							 | 
						||
| 
								 | 
							
								                nullPos = i;
							 | 
						||
| 
								 | 
							
								                break;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        // Read value
							 | 
						||
| 
								 | 
							
								        const value = this._buff.slice(this._readOffset, nullPos);
							 | 
						||
| 
								 | 
							
								        // Increment internal Buffer read offset
							 | 
						||
| 
								 | 
							
								        this._readOffset = nullPos + 1;
							 | 
						||
| 
								 | 
							
								        return value;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Inserts a null-terminated Buffer.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Buffer } The Buffer to write.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to write the Buffer to.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    insertBufferNT(value, offset) {
							 | 
						||
| 
								 | 
							
								        utils_1.checkOffsetValue(offset);
							 | 
						||
| 
								 | 
							
								        // Write Values
							 | 
						||
| 
								 | 
							
								        this.insertBuffer(value, offset);
							 | 
						||
| 
								 | 
							
								        this.insertUInt8(0x00, offset + value.length);
							 | 
						||
| 
								 | 
							
								        return this;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Writes a null-terminated Buffer.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Buffer } The Buffer to write.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to write the Buffer to.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return this
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    writeBufferNT(value, offset) {
							 | 
						||
| 
								 | 
							
								        // Checks for valid numberic value;
							 | 
						||
| 
								 | 
							
								        if (typeof offset !== 'undefined') {
							 | 
						||
| 
								 | 
							
								            utils_1.checkOffsetValue(offset);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        // Write Values
							 | 
						||
| 
								 | 
							
								        this.writeBuffer(value, offset);
							 | 
						||
| 
								 | 
							
								        this.writeUInt8(0x00, typeof offset === 'number' ? offset + value.length : this._writeOffset);
							 | 
						||
| 
								 | 
							
								        return this;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Clears the SmartBuffer instance to its original empty state.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    clear() {
							 | 
						||
| 
								 | 
							
								        this._writeOffset = 0;
							 | 
						||
| 
								 | 
							
								        this._readOffset = 0;
							 | 
						||
| 
								 | 
							
								        this.length = 0;
							 | 
						||
| 
								 | 
							
								        return this;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Gets the remaining data left to be read from the SmartBuffer instance.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return { Number }
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    remaining() {
							 | 
						||
| 
								 | 
							
								        return this.length - this._readOffset;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Gets the current read offset value of the SmartBuffer instance.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return { Number }
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    get readOffset() {
							 | 
						||
| 
								 | 
							
								        return this._readOffset;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Sets the read offset value of the SmartBuffer instance.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } - The offset value to set.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    set readOffset(offset) {
							 | 
						||
| 
								 | 
							
								        utils_1.checkOffsetValue(offset);
							 | 
						||
| 
								 | 
							
								        // Check for bounds.
							 | 
						||
| 
								 | 
							
								        utils_1.checkTargetOffset(offset, this);
							 | 
						||
| 
								 | 
							
								        this._readOffset = offset;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Gets the current write offset value of the SmartBuffer instance.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return { Number }
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    get writeOffset() {
							 | 
						||
| 
								 | 
							
								        return this._writeOffset;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Sets the write offset value of the SmartBuffer instance.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } - The offset value to set.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    set writeOffset(offset) {
							 | 
						||
| 
								 | 
							
								        utils_1.checkOffsetValue(offset);
							 | 
						||
| 
								 | 
							
								        // Check for bounds.
							 | 
						||
| 
								 | 
							
								        utils_1.checkTargetOffset(offset, this);
							 | 
						||
| 
								 | 
							
								        this._writeOffset = offset;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Gets the currently set string encoding of the SmartBuffer instance.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return { BufferEncoding } The string Buffer encoding currently set.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    get encoding() {
							 | 
						||
| 
								 | 
							
								        return this._encoding;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Sets the string encoding of the SmartBuffer instance.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param encoding { BufferEncoding } The string Buffer encoding to set.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    set encoding(encoding) {
							 | 
						||
| 
								 | 
							
								        utils_1.checkEncoding(encoding);
							 | 
						||
| 
								 | 
							
								        this._encoding = encoding;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Gets the underlying internal Buffer. (This includes unmanaged data in the Buffer)
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return { Buffer } The Buffer value.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    get internalBuffer() {
							 | 
						||
| 
								 | 
							
								        return this._buff;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Gets the value of the internal managed Buffer (Includes managed data only)
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param { Buffer }
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    toBuffer() {
							 | 
						||
| 
								 | 
							
								        return this._buff.slice(0, this.length);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Gets the String value of the internal managed Buffer
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param encoding { String } The BufferEncoding to display the Buffer as (defaults to instance level encoding).
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    toString(encoding) {
							 | 
						||
| 
								 | 
							
								        const encodingVal = typeof encoding === 'string' ? encoding : this._encoding;
							 | 
						||
| 
								 | 
							
								        // Check for invalid encoding.
							 | 
						||
| 
								 | 
							
								        utils_1.checkEncoding(encodingVal);
							 | 
						||
| 
								 | 
							
								        return this._buff.toString(encodingVal, 0, this.length);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Destroys the SmartBuffer instance.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    destroy() {
							 | 
						||
| 
								 | 
							
								        this.clear();
							 | 
						||
| 
								 | 
							
								        return this;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Handles inserting and writing strings.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { String } The String value to insert.
							 | 
						||
| 
								 | 
							
								     * @param isInsert { Boolean } True if inserting a string, false if writing.
							 | 
						||
| 
								 | 
							
								     * @param arg2 { Number | String } The offset to insert the string at, or the BufferEncoding to use.
							 | 
						||
| 
								 | 
							
								     * @param encoding { String } The BufferEncoding to use for writing strings (defaults to instance encoding).
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    _handleString(value, isInsert, arg3, encoding) {
							 | 
						||
| 
								 | 
							
								        let offsetVal = this._writeOffset;
							 | 
						||
| 
								 | 
							
								        let encodingVal = this._encoding;
							 | 
						||
| 
								 | 
							
								        // Check for offset
							 | 
						||
| 
								 | 
							
								        if (typeof arg3 === 'number') {
							 | 
						||
| 
								 | 
							
								            offsetVal = arg3;
							 | 
						||
| 
								 | 
							
								            // Check for encoding
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        else if (typeof arg3 === 'string') {
							 | 
						||
| 
								 | 
							
								            utils_1.checkEncoding(arg3);
							 | 
						||
| 
								 | 
							
								            encodingVal = arg3;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        // Check for encoding (third param)
							 | 
						||
| 
								 | 
							
								        if (typeof encoding === 'string') {
							 | 
						||
| 
								 | 
							
								            utils_1.checkEncoding(encoding);
							 | 
						||
| 
								 | 
							
								            encodingVal = encoding;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        // Calculate bytelength of string.
							 | 
						||
| 
								 | 
							
								        const byteLength = Buffer.byteLength(value, encodingVal);
							 | 
						||
| 
								 | 
							
								        // Ensure there is enough internal Buffer capacity.
							 | 
						||
| 
								 | 
							
								        if (isInsert) {
							 | 
						||
| 
								 | 
							
								            this.ensureInsertable(byteLength, offsetVal);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        else {
							 | 
						||
| 
								 | 
							
								            this._ensureWriteable(byteLength, offsetVal);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        // Write value
							 | 
						||
| 
								 | 
							
								        this._buff.write(value, offsetVal, byteLength, encodingVal);
							 | 
						||
| 
								 | 
							
								        // Increment internal Buffer write offset;
							 | 
						||
| 
								 | 
							
								        if (isInsert) {
							 | 
						||
| 
								 | 
							
								            this._writeOffset += byteLength;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        else {
							 | 
						||
| 
								 | 
							
								            // If an offset was given, check to see if we wrote beyond the current writeOffset.
							 | 
						||
| 
								 | 
							
								            if (typeof arg3 === 'number') {
							 | 
						||
| 
								 | 
							
								                this._writeOffset = Math.max(this._writeOffset, offsetVal + byteLength);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            else {
							 | 
						||
| 
								 | 
							
								                // If no offset was given, we wrote to the end of the SmartBuffer so increment writeOffset.
							 | 
						||
| 
								 | 
							
								                this._writeOffset += byteLength;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return this;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Handles writing or insert of a Buffer.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param value { Buffer } The Buffer to write.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to write the Buffer to.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    _handleBuffer(value, isInsert, offset) {
							 | 
						||
| 
								 | 
							
								        const offsetVal = typeof offset === 'number' ? offset : this._writeOffset;
							 | 
						||
| 
								 | 
							
								        // Ensure there is enough internal Buffer capacity.
							 | 
						||
| 
								 | 
							
								        if (isInsert) {
							 | 
						||
| 
								 | 
							
								            this.ensureInsertable(value.length, offsetVal);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        else {
							 | 
						||
| 
								 | 
							
								            this._ensureWriteable(value.length, offsetVal);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        // Write buffer value
							 | 
						||
| 
								 | 
							
								        value.copy(this._buff, offsetVal);
							 | 
						||
| 
								 | 
							
								        // Increment internal Buffer write offset;
							 | 
						||
| 
								 | 
							
								        if (isInsert) {
							 | 
						||
| 
								 | 
							
								            this._writeOffset += value.length;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        else {
							 | 
						||
| 
								 | 
							
								            // If an offset was given, check to see if we wrote beyond the current writeOffset.
							 | 
						||
| 
								 | 
							
								            if (typeof offset === 'number') {
							 | 
						||
| 
								 | 
							
								                this._writeOffset = Math.max(this._writeOffset, offsetVal + value.length);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            else {
							 | 
						||
| 
								 | 
							
								                // If no offset was given, we wrote to the end of the SmartBuffer so increment writeOffset.
							 | 
						||
| 
								 | 
							
								                this._writeOffset += value.length;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return this;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Ensures that the internal Buffer is large enough to read data.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param length { Number } The length of the data that needs to be read.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset of the data that needs to be read.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    ensureReadable(length, offset) {
							 | 
						||
| 
								 | 
							
								        // Offset value defaults to managed read offset.
							 | 
						||
| 
								 | 
							
								        let offsetVal = this._readOffset;
							 | 
						||
| 
								 | 
							
								        // If an offset was provided, use it.
							 | 
						||
| 
								 | 
							
								        if (typeof offset !== 'undefined') {
							 | 
						||
| 
								 | 
							
								            // Checks for valid numberic value;
							 | 
						||
| 
								 | 
							
								            utils_1.checkOffsetValue(offset);
							 | 
						||
| 
								 | 
							
								            // Overide with custom offset.
							 | 
						||
| 
								 | 
							
								            offsetVal = offset;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        // Checks if offset is below zero, or the offset+length offset is beyond the total length of the managed data.
							 | 
						||
| 
								 | 
							
								        if (offsetVal < 0 || offsetVal + length > this.length) {
							 | 
						||
| 
								 | 
							
								            throw new Error(utils_1.ERRORS.INVALID_READ_BEYOND_BOUNDS);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Ensures that the internal Buffer is large enough to insert data.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param dataLength { Number } The length of the data that needs to be written.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset of the data to be written.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    ensureInsertable(dataLength, offset) {
							 | 
						||
| 
								 | 
							
								        // Checks for valid numberic value;
							 | 
						||
| 
								 | 
							
								        utils_1.checkOffsetValue(offset);
							 | 
						||
| 
								 | 
							
								        // Ensure there is enough internal Buffer capacity.
							 | 
						||
| 
								 | 
							
								        this._ensureCapacity(this.length + dataLength);
							 | 
						||
| 
								 | 
							
								        // If an offset was provided and its not the very end of the buffer, copy data into appropriate location in regards to the offset.
							 | 
						||
| 
								 | 
							
								        if (offset < this.length) {
							 | 
						||
| 
								 | 
							
								            this._buff.copy(this._buff, offset + dataLength, offset, this._buff.length);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        // Adjust tracked smart buffer length
							 | 
						||
| 
								 | 
							
								        if (offset + dataLength > this.length) {
							 | 
						||
| 
								 | 
							
								            this.length = offset + dataLength;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        else {
							 | 
						||
| 
								 | 
							
								            this.length += dataLength;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Ensures that the internal Buffer is large enough to write data.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param dataLength { Number } The length of the data that needs to be written.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset of the data to be written (defaults to writeOffset).
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    _ensureWriteable(dataLength, offset) {
							 | 
						||
| 
								 | 
							
								        const offsetVal = typeof offset === 'number' ? offset : this._writeOffset;
							 | 
						||
| 
								 | 
							
								        // Ensure enough capacity to write data.
							 | 
						||
| 
								 | 
							
								        this._ensureCapacity(offsetVal + dataLength);
							 | 
						||
| 
								 | 
							
								        // Adjust SmartBuffer length (if offset + length is larger than managed length, adjust length)
							 | 
						||
| 
								 | 
							
								        if (offsetVal + dataLength > this.length) {
							 | 
						||
| 
								 | 
							
								            this.length = offsetVal + dataLength;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Ensures that the internal Buffer is large enough to write at least the given amount of data.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param minLength { Number } The minimum length of the data needs to be written.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    _ensureCapacity(minLength) {
							 | 
						||
| 
								 | 
							
								        const oldLength = this._buff.length;
							 | 
						||
| 
								 | 
							
								        if (minLength > oldLength) {
							 | 
						||
| 
								 | 
							
								            let data = this._buff;
							 | 
						||
| 
								 | 
							
								            let newLength = (oldLength * 3) / 2 + 1;
							 | 
						||
| 
								 | 
							
								            if (newLength < minLength) {
							 | 
						||
| 
								 | 
							
								                newLength = minLength;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            this._buff = Buffer.allocUnsafe(newLength);
							 | 
						||
| 
								 | 
							
								            data.copy(this._buff, 0, 0, oldLength);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Reads a numeric number value using the provided function.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @typeparam T { number | bigint } The type of the value to be read
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param func { Function(offset: number) => number } The function to read data on the internal Buffer with.
							 | 
						||
| 
								 | 
							
								     * @param byteSize { Number } The number of bytes read.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } The offset to read from (optional). When this is not provided, the managed readOffset is used instead.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @returns { T } the number value
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    _readNumberValue(func, byteSize, offset) {
							 | 
						||
| 
								 | 
							
								        this.ensureReadable(byteSize, offset);
							 | 
						||
| 
								 | 
							
								        // Call Buffer.readXXXX();
							 | 
						||
| 
								 | 
							
								        const value = func.call(this._buff, typeof offset === 'number' ? offset : this._readOffset);
							 | 
						||
| 
								 | 
							
								        // Adjust internal read offset if an optional read offset was not provided.
							 | 
						||
| 
								 | 
							
								        if (typeof offset === 'undefined') {
							 | 
						||
| 
								 | 
							
								            this._readOffset += byteSize;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return value;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Inserts a numeric number value based on the given offset and value.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @typeparam T { number | bigint } The type of the value to be written
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param func { Function(offset: T, offset?) => number} The function to write data on the internal Buffer with.
							 | 
						||
| 
								 | 
							
								     * @param byteSize { Number } The number of bytes written.
							 | 
						||
| 
								 | 
							
								     * @param value { T } The number value to write.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } the offset to write the number at (REQUIRED).
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @returns SmartBuffer this buffer
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    _insertNumberValue(func, byteSize, value, offset) {
							 | 
						||
| 
								 | 
							
								        // Check for invalid offset values.
							 | 
						||
| 
								 | 
							
								        utils_1.checkOffsetValue(offset);
							 | 
						||
| 
								 | 
							
								        // Ensure there is enough internal Buffer capacity. (raw offset is passed)
							 | 
						||
| 
								 | 
							
								        this.ensureInsertable(byteSize, offset);
							 | 
						||
| 
								 | 
							
								        // Call buffer.writeXXXX();
							 | 
						||
| 
								 | 
							
								        func.call(this._buff, value, offset);
							 | 
						||
| 
								 | 
							
								        // Adjusts internally managed write offset.
							 | 
						||
| 
								 | 
							
								        this._writeOffset += byteSize;
							 | 
						||
| 
								 | 
							
								        return this;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Writes a numeric number value based on the given offset and value.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @typeparam T { number | bigint } The type of the value to be written
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param func { Function(offset: T, offset?) => number} The function to write data on the internal Buffer with.
							 | 
						||
| 
								 | 
							
								     * @param byteSize { Number } The number of bytes written.
							 | 
						||
| 
								 | 
							
								     * @param value { T } The number value to write.
							 | 
						||
| 
								 | 
							
								     * @param offset { Number } the offset to write the number at (REQUIRED).
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @returns SmartBuffer this buffer
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    _writeNumberValue(func, byteSize, value, offset) {
							 | 
						||
| 
								 | 
							
								        // If an offset was provided, validate it.
							 | 
						||
| 
								 | 
							
								        if (typeof offset === 'number') {
							 | 
						||
| 
								 | 
							
								            // Check if we're writing beyond the bounds of the managed data.
							 | 
						||
| 
								 | 
							
								            if (offset < 0) {
							 | 
						||
| 
								 | 
							
								                throw new Error(utils_1.ERRORS.INVALID_WRITE_BEYOND_BOUNDS);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            utils_1.checkOffsetValue(offset);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        // Default to writeOffset if no offset value was given.
							 | 
						||
| 
								 | 
							
								        const offsetVal = typeof offset === 'number' ? offset : this._writeOffset;
							 | 
						||
| 
								 | 
							
								        // Ensure there is enough internal Buffer capacity. (raw offset is passed)
							 | 
						||
| 
								 | 
							
								        this._ensureWriteable(byteSize, offsetVal);
							 | 
						||
| 
								 | 
							
								        func.call(this._buff, value, offsetVal);
							 | 
						||
| 
								 | 
							
								        // If an offset was given, check to see if we wrote beyond the current writeOffset.
							 | 
						||
| 
								 | 
							
								        if (typeof offset === 'number') {
							 | 
						||
| 
								 | 
							
								            this._writeOffset = Math.max(this._writeOffset, offsetVal + byteSize);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        else {
							 | 
						||
| 
								 | 
							
								            // If no numeric offset was given, we wrote to the end of the SmartBuffer so increment writeOffset.
							 | 
						||
| 
								 | 
							
								            this._writeOffset += byteSize;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return this;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								exports.SmartBuffer = SmartBuffer;
							 | 
						||
| 
								 | 
							
								//# sourceMappingURL=smartbuffer.js.map
							 |