1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package com.ochafik.lang.jnaerator.runtime.globals;
20
21 import com.sun.jna.Callback;
22 import com.sun.jna.CallbackReferenceHack;
23 import com.sun.jna.NativeLibrary;
24
25 public class GlobalCallback<T extends Callback> extends Global {
26 protected final Class<T> type;
27 public GlobalCallback(NativeLibrary library, Class<T> type, String... symbols) {
28 super(library, symbols);
29 this.type = type;
30 }
31 protected T value;
32 @SuppressWarnings("unchecked")
33 public T get() {
34 if (value == null) {
35 value = (T)CallbackReferenceHack.getCallback(type, getPointer());
36 }
37 return value;
38 }
39 public void set(T value) {
40 getPointer().setPointer(0, CallbackReferenceHack.getFunctionPointer(this.value = value));
41 }
42
43 @Override
44 public String toString() {
45 try {
46 return String.valueOf(getClass().getMethod("get").invoke(this));
47 } catch (Throwable t) {
48 return super.toString();
49 }
50 }
51 }