1// Capstone Java binding
2// By Nguyen Anh Quynh & Dang Hoang Vu,  2013
3
4package capstone;
5
6import com.sun.jna.Structure;
7import com.sun.jna.Union;
8
9import java.util.List;
10import java.util.Arrays;
11
12import static capstone.Xcore_const.*;
13
14public class Xcore {
15
16  public static class MemType extends Structure {
17    public byte base;
18    public byte index;
19    public int disp;
20    public int direct;
21
22    @Override
23    public List getFieldOrder() {
24      return Arrays.asList("base", "index", "disp", "direct");
25    }
26  }
27
28  public static class OpValue extends Union {
29    public int reg;
30    public int imm;
31    public MemType mem;
32  }
33
34  public static class Operand extends Structure {
35    public int type;
36    public OpValue value;
37
38    public void read() {
39      readField("type");
40      if (type == XCORE_OP_MEM)
41        value.setType(MemType.class);
42      if (type == XCORE_OP_IMM || type == XCORE_OP_REG)
43        value.setType(Integer.TYPE);
44      if (type == XCORE_OP_INVALID)
45        return;
46      readField("value");
47    }
48
49    @Override
50    public List getFieldOrder() {
51      return Arrays.asList("type", "value");
52    }
53  }
54
55  public static class UnionOpInfo extends Capstone.UnionOpInfo {
56    public byte op_count;
57    public Operand [] op;
58
59    public UnionOpInfo() {
60      op = new Operand[8];
61    }
62
63    public void read() {
64      readField("op_count");
65      op = new Operand[op_count];
66      if (op_count != 0)
67        readField("op");
68    }
69
70    @Override
71    public List getFieldOrder() {
72      return Arrays.asList("op_count", "op");
73    }
74  }
75
76  public static class OpInfo extends Capstone.OpInfo {
77    public Operand [] op;
78
79    public OpInfo(UnionOpInfo op_info) {
80      op = op_info.op;
81    }
82  }
83}
84