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 }