borsh
Version:
Binary Object Representation Serializer for Hashing
67 lines (66 loc) • 2.77 kB
JavaScript
var EncodeBuffer = /** @class */ (function () {
function EncodeBuffer() {
this.offset = 0;
this.buffer_size = 256;
this.buffer = new ArrayBuffer(this.buffer_size);
this.view = new DataView(this.buffer);
}
EncodeBuffer.prototype.resize_if_necessary = function (needed_space) {
if (this.buffer_size - this.offset < needed_space) {
this.buffer_size = Math.max(this.buffer_size * 2, this.buffer_size + needed_space);
var new_buffer = new ArrayBuffer(this.buffer_size);
new Uint8Array(new_buffer).set(new Uint8Array(this.buffer));
this.buffer = new_buffer;
this.view = new DataView(new_buffer);
}
};
EncodeBuffer.prototype.get_used_buffer = function () {
return new Uint8Array(this.buffer).slice(0, this.offset);
};
EncodeBuffer.prototype.store_value = function (value, type) {
var bSize = type.substring(1);
var size = parseInt(bSize) / 8;
this.resize_if_necessary(size);
var toCall = type[0] === 'f' ? "setFloat".concat(bSize) : type[0] === 'i' ? "setInt".concat(bSize) : "setUint".concat(bSize);
this.view[toCall](this.offset, value, true);
this.offset += size;
};
EncodeBuffer.prototype.store_bytes = function (from) {
this.resize_if_necessary(from.length);
new Uint8Array(this.buffer).set(new Uint8Array(from), this.offset);
this.offset += from.length;
};
return EncodeBuffer;
}());
export { EncodeBuffer };
var DecodeBuffer = /** @class */ (function () {
function DecodeBuffer(buf) {
this.offset = 0;
this.buffer_size = buf.length;
this.buffer = new ArrayBuffer(buf.length);
new Uint8Array(this.buffer).set(buf);
this.view = new DataView(this.buffer);
}
DecodeBuffer.prototype.assert_enough_buffer = function (size) {
if (this.offset + size > this.buffer.byteLength) {
throw new Error('Error in schema, the buffer is smaller than expected');
}
};
DecodeBuffer.prototype.consume_value = function (type) {
var bSize = type.substring(1);
var size = parseInt(bSize) / 8;
this.assert_enough_buffer(size);
var toCall = type[0] === 'f' ? "getFloat".concat(bSize) : type[0] === 'i' ? "getInt".concat(bSize) : "getUint".concat(bSize);
var ret = this.view[toCall](this.offset, true);
this.offset += size;
return ret;
};
DecodeBuffer.prototype.consume_bytes = function (size) {
this.assert_enough_buffer(size);
var ret = this.buffer.slice(this.offset, this.offset + size);
this.offset += size;
return ret;
};
return DecodeBuffer;
}());
export { DecodeBuffer };