You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
393 lines
11 KiB
JavaScript
393 lines
11 KiB
JavaScript
|
|
|
|
var flatbuffers = {};
|
|
var json = json || require('./json');
|
|
|
|
flatbuffers.get = (name) => {
|
|
flatbuffers._map = flatbuffers._map || new Map();
|
|
if (!flatbuffers._map.has(name)) {
|
|
flatbuffers._map.set(name, {});
|
|
}
|
|
return flatbuffers._map.get(name);
|
|
};
|
|
|
|
flatbuffers.BinaryReader = class {
|
|
|
|
static open(data) {
|
|
return new flatbuffers.BinaryReader(data);
|
|
}
|
|
|
|
constructor(data) {
|
|
const buffer = data instanceof Uint8Array ? data : data.peek();
|
|
this._buffer = buffer;
|
|
this._position = 0;
|
|
this._dataView = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);
|
|
}
|
|
|
|
get root() {
|
|
return this.int32(this._position) + this._position;
|
|
}
|
|
|
|
get identifier() {
|
|
if (this._buffer.length >= 8) {
|
|
const buffer = this._buffer.slice(4, 8);
|
|
if (buffer.every((c) => c >= 32 && c <= 128)) {
|
|
return String.fromCharCode(...buffer);
|
|
}
|
|
}
|
|
return '';
|
|
}
|
|
|
|
bool(offset) {
|
|
return !!this.int8(offset);
|
|
}
|
|
|
|
bool_(position, offset, defaultValue) {
|
|
offset = this._offset(position, offset);
|
|
return offset ? this.bool(position + offset) : defaultValue;
|
|
}
|
|
|
|
int8(offset) {
|
|
return this.uint8(offset) << 24 >> 24;
|
|
}
|
|
|
|
int8_(position, offset, defaultValue) {
|
|
offset = this._offset(position, offset);
|
|
return offset ? this.int8(position + offset) : defaultValue;
|
|
}
|
|
|
|
uint8(offset) {
|
|
return this._buffer[offset];
|
|
}
|
|
|
|
uint8_(position, offset, defaultValue) {
|
|
offset = this._offset(position, offset);
|
|
return offset ? this.uint8(position + offset) : defaultValue;
|
|
}
|
|
|
|
int16(offset) {
|
|
return this._dataView.getInt16(offset, true);
|
|
}
|
|
|
|
int16_(position, offset, defaultValue) {
|
|
offset = this._offset(position, offset);
|
|
return offset ? this.int16(position + offset) : defaultValue;
|
|
}
|
|
|
|
uint16(offset) {
|
|
return this._dataView.getUint16(offset, true);
|
|
}
|
|
|
|
uint16_(position, offset, defaultValue) {
|
|
offset = this._offset(position, offset);
|
|
return offset ? this.uint16(position + offset) : defaultValue;
|
|
}
|
|
|
|
int32(offset) {
|
|
return this._dataView.getInt32(offset, true);
|
|
}
|
|
|
|
int32_(position, offset, defaultValue) {
|
|
offset = this._offset(position, offset);
|
|
return offset ? this.int32(position + offset) : defaultValue;
|
|
}
|
|
|
|
uint32(offset) {
|
|
return this._dataView.getUint32(offset, true);
|
|
}
|
|
|
|
uint32_(position, offset, defaultValue) {
|
|
offset = this._offset(position, offset);
|
|
return offset ? this.int32(position + offset) : defaultValue;
|
|
}
|
|
|
|
int64(offset) {
|
|
return this._dataView.getInt64(offset, true);
|
|
}
|
|
|
|
int64_(position, offset, defaultValue) {
|
|
offset = this._offset(position, offset);
|
|
return offset ? this.int64(position + offset) : defaultValue;
|
|
}
|
|
|
|
uint64(offset) {
|
|
return this._dataView.getUint64(offset, true);
|
|
}
|
|
|
|
uint64_(position, offset, defaultValue) {
|
|
offset = this._offset(position, offset);
|
|
return offset ? this.uint64(position + offset) : defaultValue;
|
|
}
|
|
|
|
float32(offset) {
|
|
return this._dataView.getFloat32(offset, true);
|
|
}
|
|
|
|
float32_(position, offset, defaultValue) {
|
|
offset = this._offset(position, offset);
|
|
return offset ? this.float32(position + offset) : defaultValue;
|
|
}
|
|
|
|
float64(offset) {
|
|
return this._dataView.getFloat64(offset, true);
|
|
}
|
|
|
|
float64_(position, offset, defaultValue) {
|
|
offset = this._offset(position, offset);
|
|
return offset ? this.float64(position + offset) : defaultValue;
|
|
}
|
|
|
|
string(offset, encoding) {
|
|
offset += this.int32(offset);
|
|
const length = this.int32(offset);
|
|
var result = '';
|
|
var i = 0;
|
|
offset += 4;
|
|
if (encoding === 1) {
|
|
return this._buffer.subarray(offset, offset + length);
|
|
}
|
|
while (i < length) {
|
|
var codePoint;
|
|
// Decode UTF-8
|
|
const a = this.uint8(offset + i++);
|
|
if (a < 0xC0) {
|
|
codePoint = a;
|
|
}
|
|
else {
|
|
const b = this.uint8(offset + i++);
|
|
if (a < 0xE0) {
|
|
codePoint = ((a & 0x1F) << 6) | (b & 0x3F);
|
|
}
|
|
else {
|
|
const c = this.uint8(offset + i++);
|
|
if (a < 0xF0) {
|
|
codePoint = ((a & 0x0F) << 12) | ((b & 0x3F) << 6) | (c & 0x3F);
|
|
}
|
|
else {
|
|
const d = this.uint8(offset + i++);
|
|
codePoint = ((a & 0x07) << 18) | ((b & 0x3F) << 12) | ((c & 0x3F) << 6) | (d & 0x3F);
|
|
}
|
|
}
|
|
}
|
|
// Encode UTF-16
|
|
if (codePoint < 0x10000) {
|
|
result += String.fromCharCode(codePoint);
|
|
}
|
|
else {
|
|
codePoint -= 0x10000;
|
|
result += String.fromCharCode((codePoint >> 10) + 0xD800, (codePoint & ((1 << 10) - 1)) + 0xDC00);
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
string_(position, offset, defaultValue) {
|
|
offset = this._offset(position, offset);
|
|
return offset ? this.string(position + offset) : defaultValue;
|
|
}
|
|
|
|
bools_(position, offset) {
|
|
offset = this._offset(position, offset);
|
|
if (offset) {
|
|
const length = this._length(position + offset);
|
|
offset = this._vector(position + offset);
|
|
const array = new Array(length);
|
|
for (let i = 0; i < length; i++) {
|
|
array[i] = this.uint8(offset + i + 4) ? true : false;
|
|
}
|
|
return array;
|
|
}
|
|
return [];
|
|
}
|
|
|
|
int64s_(position, offset) {
|
|
offset = this._offset(position, offset);
|
|
if (offset) {
|
|
const length = this._length(position + offset);
|
|
offset = this._vector(position + offset);
|
|
const array = new Array(length);
|
|
for (let i = 0; i < length; i++) {
|
|
array[i] = this.int64(offset + (i << 3));
|
|
}
|
|
return array;
|
|
}
|
|
return [];
|
|
}
|
|
|
|
uint64s_(position, offset) {
|
|
offset = this._offset(position, offset);
|
|
if (offset) {
|
|
const length = this._length(position + offset);
|
|
offset = this._vector(position + offset);
|
|
const array = new Array(length);
|
|
for (let i = 0; i < length; i++) {
|
|
array[i] = this.uint64(offset + (i << 3));
|
|
}
|
|
return array;
|
|
}
|
|
return [];
|
|
}
|
|
|
|
strings_(position, offset) {
|
|
offset = this._offset(position, offset);
|
|
if (offset) {
|
|
const length = this._length(position + offset);
|
|
offset = this._vector(position + offset);
|
|
const array = new Array(length);
|
|
for (let i = 0; i < length; i++) {
|
|
array[i] = this.string(offset + i * 4);
|
|
}
|
|
return array;
|
|
}
|
|
return [];
|
|
}
|
|
|
|
struct(position, offset, decode) {
|
|
offset = this._offset(position, offset);
|
|
return offset ? decode(this, position + offset) : null;
|
|
}
|
|
|
|
table(position, offset, decode) {
|
|
offset = this._offset(position, offset);
|
|
return offset ? decode(this, this._indirect(position + offset)) : null;
|
|
}
|
|
|
|
union(position, offset, decode) {
|
|
const type_offset = this._offset(position, offset);
|
|
const type = type_offset ? this.uint8(position + type_offset) : 0;
|
|
offset = this._offset(position, offset + 2);
|
|
return offset ? decode(this, this._union(position + offset), type) : null;
|
|
}
|
|
|
|
typedArray(position, offset, type) {
|
|
offset = this._offset(position, offset);
|
|
return offset ? new type(this._buffer.buffer, this._buffer.byteOffset + this._vector(position + offset), this._length(position + offset)) : new type(0);
|
|
}
|
|
|
|
unionArray(/* position, offset, decode */) {
|
|
throw new flatbuffers.Error('Not implemented.');
|
|
}
|
|
|
|
structArray(position, offset, size, decode) {
|
|
offset = this._offset(position, offset);
|
|
const length = offset ? this._length(position + offset) : 0;
|
|
const list = new Array(length);
|
|
for (let i = 0; i < length; i++) {
|
|
list[i] = decode(this, this._indirect(this._vector(position + offset) + i * 4));
|
|
}
|
|
return list;
|
|
}
|
|
|
|
tableArray(position, offset, decode) {
|
|
offset = this._offset(position, offset);
|
|
const length = offset ? this._length(position + offset) : 0;
|
|
const list = new Array(length);
|
|
for (let i = 0; i < length; i++) {
|
|
list[i] = decode(this, this._indirect(this._vector(position + offset) + i * 4));
|
|
}
|
|
return list;
|
|
}
|
|
|
|
_offset(bb_pos, vtableOffset) {
|
|
var vtable = bb_pos - this.int32(bb_pos);
|
|
return vtableOffset < this.int16(vtable) ? this.int16(vtable + vtableOffset) : 0;
|
|
}
|
|
|
|
_indirect(offset) {
|
|
return offset + this.int32(offset);
|
|
}
|
|
|
|
_vector(offset) {
|
|
return offset + this.int32(offset) + 4;
|
|
}
|
|
|
|
_length(offset) {
|
|
return this.int32(offset + this.int32(offset));
|
|
}
|
|
|
|
_union(offset) {
|
|
return offset + this.int32(offset);
|
|
}
|
|
};
|
|
|
|
flatbuffers.TextReader = class {
|
|
|
|
static open(obj) {
|
|
return new flatbuffers.TextReader(obj);
|
|
}
|
|
|
|
constructor(obj) {
|
|
this._root = obj;
|
|
}
|
|
|
|
get root() {
|
|
return this._root;
|
|
}
|
|
|
|
value(obj, defaultValue) {
|
|
return obj !== undefined ? obj : defaultValue;
|
|
}
|
|
|
|
object(obj, decode) {
|
|
return obj !== undefined ? decode(this, obj) : obj;
|
|
}
|
|
|
|
array(obj) {
|
|
if (Array.isArray(obj)) {
|
|
const target = new Array(obj.length);
|
|
for (let i = 0; i < obj.length; i++) {
|
|
target[i] = obj[i];
|
|
}
|
|
return target;
|
|
}
|
|
if (!obj) {
|
|
return [];
|
|
}
|
|
throw new flatbuffers.Error('Inalid value array.');
|
|
}
|
|
|
|
typedArray(obj, type) {
|
|
if (Array.isArray(obj)) {
|
|
const target = new type(obj.length);
|
|
for (let i = 0; i < obj.length; i++) {
|
|
target[i] = obj[i];
|
|
}
|
|
return target;
|
|
}
|
|
if (!obj) {
|
|
return new type(0);
|
|
}
|
|
throw new flatbuffers.Error('Inalid typed array.');
|
|
}
|
|
|
|
objectArray(obj, decode) {
|
|
if (Array.isArray(obj)) {
|
|
const target = new Array(obj.length);
|
|
for (let i = 0; i < obj.length; i++) {
|
|
target[i] = decode(this, obj[i]);
|
|
}
|
|
return target;
|
|
}
|
|
if (!obj) {
|
|
return [];
|
|
}
|
|
throw new flatbuffers.Error('Inalid object array.');
|
|
}
|
|
};
|
|
|
|
flatbuffers.Error = class extends Error {
|
|
|
|
constructor(message) {
|
|
super(message);
|
|
this.name = 'FlatBuffers Error';
|
|
this.message = message;
|
|
}
|
|
};
|
|
|
|
if (typeof module !== "undefined" && typeof module.exports === "object") {
|
|
module.exports.BinaryReader = flatbuffers.BinaryReader;
|
|
module.exports.TextReader = flatbuffers.TextReader;
|
|
module.exports.get = flatbuffers.get;
|
|
}
|