// automatically generated by the FlatBuffers compiler, do not modify
import {NestedStruct, NestedStructT} from '../../my-game/example/nested-struct.js';
import {OuterStruct, OuterStructT} from '../../my-game/example/outer-struct.js';
export class ArrayStruct {
  constructor() {
    this.bb = null;
    this.bb_pos = 0;
  }
  __init(i, bb) {
    this.bb_pos = i;
    this.bb = bb;
    return this;
  }
  aUnderscore() {
    return this.bb.readFloat32(this.bb_pos);
  }
  bUnderscore(index) {
    return this.bb.readInt32(this.bb_pos + 4 + index * 4);
  }
  c() {
    return this.bb.readInt8(this.bb_pos + 64);
  }
  d(index, obj) {
    return (obj || new NestedStruct())
        .__init(this.bb_pos + 72 + index * 1072, this.bb);
  }
  e() {
    return this.bb.readInt32(this.bb_pos + 2216);
  }
  f(index, obj) {
    return (obj || new OuterStruct())
        .__init(this.bb_pos + 2224 + index * 208, this.bb);
  }
  g(index) {
    return this.bb.readInt64(this.bb_pos + 2640 + index * 8);
  }
  static getFullyQualifiedName() {
    return 'MyGame.Example.ArrayStruct';
  }
  static sizeOf() {
    return 2656;
  }
  static createArrayStruct(builder, a_underscore, b_underscore, c, d, e, f, g) {
    builder.prep(8, 2656);
    for (let i = 1; i >= 0; --i) {
      builder.writeInt64(BigInt(g?.[i] ?? 0));
    }
    for (let i = 1; i >= 0; --i) {
      const item = f?.[i];
      if (item instanceof OuterStructT) {
        item.pack(builder);
        continue;
      }
      OuterStruct.createOuterStruct(
          builder, item?.a, item?.b, (item?.cUnderscore?.a ?? 0),
          (item?.cUnderscore?.b ?? []), (item?.cUnderscore?.c ?? 0),
          (item?.cUnderscore?.dUnderscore ?? BigInt(0)), item?.d,
          (item?.e?.a ?? 0), (item?.e?.b ?? []), (item?.e?.c ?? 0),
          (item?.e?.dUnderscore ?? BigInt(0)), item?.f);
    }
    builder.pad(4);
    builder.writeInt32(e);
    for (let i = 1; i >= 0; --i) {
      const item = d?.[i];
      if (item instanceof NestedStructT) {
        item.pack(builder);
        continue;
      }
      NestedStruct.createNestedStruct(
          builder, item?.a, item?.b, item?.cUnderscore, item?.dOuter, item?.e);
    }
    builder.pad(7);
    builder.writeInt8(c);
    for (let i = 14; i >= 0; --i) {
      builder.writeInt32((b_underscore?.[i] ?? 0));
    }
    builder.writeFloat32(a_underscore);
    return builder.offset();
  }
  unpack() {
    return new ArrayStructT(
        this.aUnderscore(),
        this.bb.createScalarList(this.bUnderscore.bind(this), 15), this.c(),
        this.bb.createObjList(this.d.bind(this), 2), this.e(),
        this.bb.createObjList(this.f.bind(this), 2),
        this.bb.createScalarList(this.g.bind(this), 2));
  }
  unpackTo(_o) {
    _o.aUnderscore = this.aUnderscore();
    _o.bUnderscore = this.bb.createScalarList(this.bUnderscore.bind(this), 15);
    _o.c = this.c();
    _o.d = this.bb.createObjList(this.d.bind(this), 2);
    _o.e = this.e();
    _o.f = this.bb.createObjList(this.f.bind(this), 2);
    _o.g = this.bb.createScalarList(this.g.bind(this), 2);
  }
}
export class ArrayStructT {
  constructor(
      aUnderscore = 0.0, bUnderscore = [], c = 0, d = [], e = 0, f = [],
      g = []) {
    this.aUnderscore = aUnderscore;
    this.bUnderscore = bUnderscore;
    this.c = c;
    this.d = d;
    this.e = e;
    this.f = f;
    this.g = g;
  }
  pack(builder) {
    return ArrayStruct.createArrayStruct(
        builder, this.aUnderscore, this.bUnderscore, this.c, this.d, this.e,
        this.f, this.g);
  }
}
