// AUTO GENERATED FILE, DO NOT EDIT.
//
// Generated by `package:ffigen`.
import 'dart:ffi' as ffi;

class Struct1 extends ffi.Struct {
  @ffi.Int8()
  external int a;
}

class Union1 extends ffi.Union {
  @ffi.Int8()
  external int a;
}

class EmptyUnion extends ffi.Opaque {}

class Primitives extends ffi.Union {
  @ffi.Int8()
  external int a;

  @ffi.Int32()
  external int b;

  @ffi.Float()
  external double c;

  @ffi.Double()
  external double d;
}

class PrimitivesWithPointers extends ffi.Union {
  @ffi.Int8()
  external int a;

  @ffi.Float()
  external double b;

  external ffi.Pointer<ffi.Double> c;

  external ffi.Pointer<Union1> d;

  external ffi.Pointer<Struct1> d1;
}

class WithArray extends ffi.Union {
  @ffi.Array.multi([10])
  external ffi.Array<ffi.Int8> a;

  @ffi.Array.multi([10])
  external ffi.Array<Union1> b;

  @ffi.Array.multi([10])
  external ffi.Array<Struct1> b1;

  @ffi.Array.multi([10])
  external ffi.Array<ffi.Pointer<Union1>> c;
}
