1 import java.foreign.Libraries;
   2 import java.foreign.annotations.NativeAddressof;
   3 import java.foreign.annotations.NativeFunction;
   4 import java.foreign.annotations.NativeGetter;
   5 import java.foreign.annotations.NativeHeader;
   6 import java.foreign.annotations.NativeSetter;
   7 import java.foreign.annotations.NativeStruct;
   8 import java.foreign.memory.Pointer;
   9 import java.foreign.memory.Struct;
  10 import java.lang.invoke.MethodHandles;
  11 
  12 @NativeHeader(libraries={ "TestHelpers" })
  13 public interface TestHelper {
  14     @NativeStruct("${dot}")
  15     interface OpaquePoint extends Struct<OpaquePoint> {}
  16 
  17     @NativeStruct("[i32(x)i32(y)u64(data):u8](point)")
  18     interface Point extends Struct<Point> {
  19         @NativeGetter("x")
  20         int x$get();
  21         @NativeSetter("x")
  22         void x$set(int x);
  23         @NativeAddressof("x")
  24         Pointer<Integer> x$ptr();
  25 
  26         @NativeGetter("y")
  27         int y$get();
  28         @NativeSetter("y")
  29         void y$set(int y);
  30         @NativeAddressof("y")
  31         Pointer<java.lang.Integer> y$ptr();
  32 
  33         @NativeGetter("data")
  34         Pointer<java.lang.Byte> data$get();
  35         @NativeSetter("data")
  36         void data$set(Pointer<Byte> data);
  37         @NativeAddressof("data")
  38         Pointer<Pointer<Byte>> data$ptr();
  39     }
  40 
  41     @NativeFunction("(u64:${dot}i32i32)v")
  42     void setCoordination(Pointer<OpaquePoint> dot, int x, int y);
  43 
  44     @NativeFunction("(u64:${dot})i32")
  45     int getDotX(Pointer<OpaquePoint> dot);
  46 
  47     @NativeFunction("(u64:${dot})i32")
  48     int getDotY(Pointer<OpaquePoint> dot);
  49 
  50     @NativeFunction("()u64:${dot}")
  51     Pointer<OpaquePoint> allocateDot();
  52 
  53     @NativeFunction("(u64:${dot})v")
  54     void freeDot(Pointer<OpaquePoint> dot);
  55 
  56     @NativeFunction("(i32)u64:${point}")
  57     Pointer<Point> allocateDotArray(int number);
  58 
  59     @NativeFunction("(u64:${point})v")
  60     void freeDotArray(Pointer<Point> array);
  61 
  62     @NativeFunction("(i32u64:u64:${dot})v")
  63     void allocateDots(int number, Pointer<? extends Pointer<OpaquePoint>> dots);
  64 
  65     @NativeFunction("(i32u64:u64:${dot})v")
  66     void freeDots(int number, Pointer<? extends Pointer<OpaquePoint>> dots);
  67 
  68     @NativeFunction("(i32i32u64:u8)${point}")
  69     Point getDot(int x, int y, Pointer<?> dot);
  70 
  71     final static TestHelper lib = Libraries.bind(MethodHandles.lookup(), TestHelper.class);
  72 }