blob: fd170583853fb2701cdf7f415b8d4cb7458f55d1 [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
*/
var Promise = require('../lib/promise');
var byteUtil = require('../vdl/byte-util');
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 {Promise<number>} The byte value. EOF is represented by null.
*/
BinaryReader.prototype.readByte = function() {
var val = this.buf[this.pos];
this.pos++;
if (val === undefined) {
return Promise.reject(
new Error('Failed to read byte, reached end of buffer'));
}
return Promise.resolve(val);
};
/**
* Returns the next byte from the buffer without advancing the reader
* @return {Promise<number>} The byte value. EOF is represented by null.
*/
BinaryReader.prototype.peekByte = function() {
var val = this.buf[this.pos];
if (val === undefined) {
return Promise.reject(
new Error('Failed to read byte, reached end of buffer'));
}
return Promise.resolve(val);
};
/**
* Reads an array of bytes from the buffer.
* @param {number} amt. The number of bytes to read.
* @return {Promise<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) {
return Promise.reject(
new Error('Failed to read ' + amt + ' bytes. Hit EOF.'));
}
return Promise.resolve(arr);
};
BinaryReader.prototype.hasData = function() {
return this.pos < this.buf.length;
};
BinaryReader.prototype.getHexBytes = function() {
return byteUtil.bytes2Hex(this.buf.slice(this.pos));
};