blob: 3cf95b17c918093bcdf4d084cee5cb4cc767e2d0 [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
/**
* @fileoverview Definition of BinaryReader.
* @private
*/
module.exports = BinaryReader;
/**
* BinaryReader assists in reading from a Uint8Array by keeping track of the
* position being read.
* @private
* @param {Uint8Array} The buffer to read from.
* @constructor
*/
function BinaryReader(buf) {
this.pos = 0;
this.buf = buf;
}
/**
* Reads a byte from the bufer.
* @return {number} The byte value. EOF is represented by null.
*/
BinaryReader.prototype.readByte = function() {
var val = this.buf[this.pos];
this.pos++;
if (val === undefined) {
throw new Error('Failed to read byte, reached end of buffer');
}
return val;
};
/**
* Returns the next byte from the buffer without advancing the reader
* @return {number} The byte value. EOF is represented by null.
*/
BinaryReader.prototype.peekByte = function() {
var val = this.buf[this.pos];
if (val === undefined) {
throw new Error('Failed to read byte, reached end of buffer');
}
return val;
};
/**
* Reads an array of bytes from the buffer.
* @param {number} amt. The number of bytes to read.
* @return {Uint8Array} The byte array. If the whole size cannot be read, null
* (representing EOF) is returned.
*/
BinaryReader.prototype.readByteArray = function(amt) {
var arr = this.buf.subarray(this.pos, this.pos + amt);
this.pos += amt;
if (this.pos > this.buf) {
throw new Error('Failed to read ' + amt + ' bytes. Hit EOF.');
}
return arr;
};
BinaryReader.prototype.hasData = function() {
return this.pos < this.buf.length;
};