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.ochafik.util.string.StringUtils;
22 import com.sun.jna.NativeLibrary;
23 import com.sun.jna.Pointer;
24 import com.sun.jna.PointerType;
25
26 public abstract class GlobalPrimitive<T extends PointerType> extends Global {
27 protected final Class<T> type;
28 protected boolean indirected = false;
29 public GlobalPrimitive(NativeLibrary library, Class<T> type, String... symbols) {
30 super(library, symbols);
31 this.type = type;
32 }
33 protected T value;
34 protected T getValue() {
35 if (value == null) {
36 try {
37 value = type.newInstance();
38 } catch (Exception e) {
39 throw new RuntimeException("Failed to instantiate pointer to " + StringUtils.implode(symbols, "/"), e);
40 }
41 Pointer pointer = getPointer();
42 if (indirected) {
43 pointer = pointer.getPointer(0);
44 }
45 value.setPointer(pointer);
46 }
47 return value;
48 }
49 @Override
50 public String toString() {
51 try {
52 return String.valueOf(getClass().getMethod("get").invoke(this));
53 } catch (Throwable t) {
54 return super.toString();
55 }
56 }
57 }