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

package MyGame.Example;

import java.nio.*;
import java.lang.*;
import java.util.*;
import com.google.flatbuffers.*;

public class ArrayTableT {
  private MyGame.Example.ArrayStructT a;

  public MyGame.Example.ArrayStructT getA() { return a; }

  public void setA(MyGame.Example.ArrayStructT a) { this.a = a; }


  public ArrayTableT() {
    this.a = new MyGame.Example.ArrayStructT();
  }
  public static ArrayTableT deserializeFromBinary(byte[] fbBuffer) {
    return ArrayTable.getRootAsArrayTable(ByteBuffer.wrap(fbBuffer)).unpack();
  }
  public byte[] serializeToBinary() {
    FlatBufferBuilder fbb = new FlatBufferBuilder();
    ArrayTable.finishArrayTableBuffer(fbb, ArrayTable.pack(fbb, this));
    return fbb.sizedByteArray();
  }
}

