// automatically generated by the FlatBuffers compiler, do not modify

/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */

import * as flatbuffers from 'flatbuffers';

import {ArrayStruct, ArrayStructT} from '../../my-game/example/array-struct.js';

export class ArrayTable implements flatbuffers.IUnpackableObject<ArrayTableT> {
  bb: flatbuffers.ByteBuffer | null = null;
  bb_pos = 0;
  __init(i: number, bb: flatbuffers.ByteBuffer): ArrayTable {
    this.bb_pos = i;
    this.bb = bb;
    return this;
  }

  static getRootAsArrayTable(
    bb: flatbuffers.ByteBuffer,
    obj?: ArrayTable,
  ): ArrayTable {
    return (obj || new ArrayTable()).__init(
      bb.readInt32(bb.position()) + bb.position(),
      bb,
    );
  }

  static getSizePrefixedRootAsArrayTable(
    bb: flatbuffers.ByteBuffer,
    obj?: ArrayTable,
  ): ArrayTable {
    bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);
    return (obj || new ArrayTable()).__init(
      bb.readInt32(bb.position()) + bb.position(),
      bb,
    );
  }

  static bufferHasIdentifier(bb: flatbuffers.ByteBuffer): boolean {
    return bb.__has_identifier('RHUB');
  }

  a(): string | null;
  a(optionalEncoding: flatbuffers.Encoding): string | Uint8Array | null;
  a(optionalEncoding?: any): string | Uint8Array | null {
    const offset = this.bb!.__offset(this.bb_pos, 4);
    return offset
      ? this.bb!.__string(this.bb_pos + offset, optionalEncoding)
      : null;
  }

  cUnderscore(obj?: ArrayStruct): ArrayStruct | null {
    const offset = this.bb!.__offset(this.bb_pos, 6);
    return offset
      ? (obj || new ArrayStruct()).__init(this.bb_pos + offset, this.bb!)
      : null;
  }

  static getFullyQualifiedName(): string {
    return 'MyGame.Example.ArrayTable';
  }

  static startArrayTable(builder: flatbuffers.Builder) {
    builder.startObject(2);
  }

  static addA(builder: flatbuffers.Builder, aOffset: flatbuffers.Offset) {
    builder.addFieldOffset(0, aOffset, 0);
  }

  static addCUnderscore(
    builder: flatbuffers.Builder,
    cUnderscoreOffset: flatbuffers.Offset,
  ) {
    builder.addFieldStruct(1, cUnderscoreOffset, 0);
  }

  static endArrayTable(builder: flatbuffers.Builder): flatbuffers.Offset {
    const offset = builder.endObject();
    return offset;
  }

  static finishArrayTableBuffer(
    builder: flatbuffers.Builder,
    offset: flatbuffers.Offset,
  ) {
    builder.finish(offset, 'RHUB');
  }

  static finishSizePrefixedArrayTableBuffer(
    builder: flatbuffers.Builder,
    offset: flatbuffers.Offset,
  ) {
    builder.finish(offset, 'RHUB', true);
  }

  unpack(): ArrayTableT {
    return new ArrayTableT(
      this.a(),
      this.cUnderscore() !== null ? this.cUnderscore()!.unpack() : null,
    );
  }

  unpackTo(_o: ArrayTableT): void {
    _o.a = this.a();
    _o.cUnderscore =
      this.cUnderscore() !== null ? this.cUnderscore()!.unpack() : null;
  }
}

export class ArrayTableT implements flatbuffers.IGeneratedObject {
  constructor(
    public a: string | Uint8Array | null = null,
    public cUnderscore: ArrayStructT | null = null,
  ) {}

  pack(builder: flatbuffers.Builder): flatbuffers.Offset {
    const a = this.a !== null ? builder.createString(this.a!) : 0;

    ArrayTable.startArrayTable(builder);
    ArrayTable.addA(builder, a);
    ArrayTable.addCUnderscore(
      builder,
      this.cUnderscore !== null ? this.cUnderscore!.pack(builder) : 0,
    );

    return ArrayTable.endArrayTable(builder);
  }
}
