66 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
| module.exports = BinaryWriter;
 | |
| 
 | |
| function BinaryWriter(size, allowResize) {
 | |
|     this.buffer = new Buffer(size);
 | |
|     this.position = 0;
 | |
|     this.allowResize = allowResize;
 | |
| }
 | |
| 
 | |
| function _write(write, size) {
 | |
|     return function (value, noAssert) {
 | |
|         this.ensureSize(size);
 | |
| 
 | |
|         write.call(this.buffer, value, this.position, noAssert);
 | |
|         this.position += size;
 | |
|     };
 | |
| }
 | |
| 
 | |
| BinaryWriter.prototype.writeUInt8 = _write(Buffer.prototype.writeUInt8, 1);
 | |
| BinaryWriter.prototype.writeUInt16LE = _write(Buffer.prototype.writeUInt16LE, 2);
 | |
| BinaryWriter.prototype.writeUInt16BE = _write(Buffer.prototype.writeUInt16BE, 2);
 | |
| BinaryWriter.prototype.writeUInt32LE = _write(Buffer.prototype.writeUInt32LE, 4);
 | |
| BinaryWriter.prototype.writeUInt32BE = _write(Buffer.prototype.writeUInt32BE, 4);
 | |
| BinaryWriter.prototype.writeInt8 = _write(Buffer.prototype.writeInt8, 1);
 | |
| BinaryWriter.prototype.writeInt16LE = _write(Buffer.prototype.writeInt16LE, 2);
 | |
| BinaryWriter.prototype.writeInt16BE = _write(Buffer.prototype.writeInt16BE, 2);
 | |
| BinaryWriter.prototype.writeInt32LE = _write(Buffer.prototype.writeInt32LE, 4);
 | |
| BinaryWriter.prototype.writeInt32BE = _write(Buffer.prototype.writeInt32BE, 4);
 | |
| BinaryWriter.prototype.writeFloatLE = _write(Buffer.prototype.writeFloatLE, 4);
 | |
| BinaryWriter.prototype.writeFloatBE = _write(Buffer.prototype.writeFloatBE, 4);
 | |
| BinaryWriter.prototype.writeDoubleLE = _write(Buffer.prototype.writeDoubleLE, 8);
 | |
| BinaryWriter.prototype.writeDoubleBE = _write(Buffer.prototype.writeDoubleBE, 8);
 | |
| 
 | |
| BinaryWriter.prototype.writeBuffer = function (buffer) {
 | |
|     this.ensureSize(buffer.length);
 | |
| 
 | |
|     buffer.copy(this.buffer, this.position, 0, buffer.length);
 | |
|     this.position += buffer.length;
 | |
| };
 | |
| 
 | |
| BinaryWriter.prototype.writeVarInt = function (value) {
 | |
|     var length = 1;
 | |
| 
 | |
|     while ((value & 0xFFFFFF80) !== 0) {
 | |
|         this.writeUInt8((value & 0x7F) | 0x80);
 | |
|         value >>>= 7;
 | |
|         length++;
 | |
|     }
 | |
| 
 | |
|     this.writeUInt8(value & 0x7F);
 | |
| 
 | |
|     return length;
 | |
| };
 | |
| 
 | |
| BinaryWriter.prototype.ensureSize = function (size) {
 | |
|     if (this.buffer.length < this.position + size) {
 | |
|         if (this.allowResize) {
 | |
|             var tempBuffer = new Buffer(this.position + size);
 | |
|             this.buffer.copy(tempBuffer, 0, 0, this.buffer.length);
 | |
|             this.buffer = tempBuffer;
 | |
|         }
 | |
|         else {
 | |
|             throw new RangeError('index out of range');
 | |
|         }
 | |
|     }
 | |
| };
 |