JType.java revision 50d0b14689b0ae95ea7b66a8c2f7b955115812dd
1
2import java.util.HashMap;
3
4public class JType {
5
6    String baseType;
7    boolean isArray;
8    boolean isClass;
9    boolean isString;
10
11    static HashMap<CType,JType> typeMapping = new HashMap<CType,JType>();
12    static HashMap<CType,JType> arrayTypeMapping = new HashMap<CType,JType>();
13
14    static {
15    // Primitive types
16    typeMapping.put(new CType("GLbitfield"), new JType("int"));
17    typeMapping.put(new CType("GLboolean"), new JType("boolean"));
18    typeMapping.put(new CType("GLclampf"), new JType("float"));
19    typeMapping.put(new CType("GLclampx"), new JType("int"));
20    typeMapping.put(new CType("GLenum"), new JType("int"));
21    typeMapping.put(new CType("GLfloat"), new JType("float"));
22    typeMapping.put(new CType("GLfixed"), new JType("int"));
23    typeMapping.put(new CType("GLint"), new JType("int"));
24    typeMapping.put(new CType("GLintptr"), new JType("int"));
25    typeMapping.put(new CType("GLshort"), new JType("short"));
26    typeMapping.put(new CType("GLsizei"), new JType("int"));
27    typeMapping.put(new CType("GLsizeiptr"), new JType("int"));
28    typeMapping.put(new CType("GLubyte"), new JType("byte"));
29    typeMapping.put(new CType("GLuint"), new JType("int"));
30    typeMapping.put(new CType("void"), new JType("void"));
31    typeMapping.put(new CType("GLubyte", true, true), new JType("String", false, false));
32    typeMapping.put(new CType("char", false, true), new JType("byte"));
33    typeMapping.put(new CType("char", true, true), new JType("String", false, false));
34    typeMapping.put(new CType("int"), new JType("int"));
35
36    // Untyped pointers map to untyped Buffers
37    typeMapping.put(new CType("GLvoid", true, true),
38            new JType("java.nio.Buffer", true, false));
39    typeMapping.put(new CType("GLvoid", false, true),
40            new JType("java.nio.Buffer", true, false));
41    typeMapping.put(new CType("void", false, true),
42            new JType("java.nio.Buffer", true, false));
43    typeMapping.put(new CType("GLeglImageOES", false, false),
44            new JType("java.nio.Buffer", true, false));
45
46    // Typed pointers map to typed Buffers
47    typeMapping.put(new CType("GLboolean", false, true),
48            new JType("java.nio.IntBuffer", true, false));
49    typeMapping.put(new CType("GLenum", false, true),
50            new JType("java.nio.IntBuffer", true, false));
51    typeMapping.put(new CType("GLfixed", false, true),
52            new JType("java.nio.IntBuffer", true, false));
53    typeMapping.put(new CType("GLfixed", true, true),
54            new JType("java.nio.IntBuffer", true, false));
55    typeMapping.put(new CType("GLfloat", false, true),
56            new JType("java.nio.FloatBuffer", true, false));
57    typeMapping.put(new CType("GLfloat", true, true),
58            new JType("java.nio.FloatBuffer", true, false));
59    typeMapping.put(new CType("GLint", false, true),
60            new JType("java.nio.IntBuffer", true, false));
61    typeMapping.put(new CType("GLint", true, true),
62            new JType("java.nio.IntBuffer", true, false));
63    typeMapping.put(new CType("GLsizei", false, true),
64            new JType("java.nio.IntBuffer", true, false));
65    typeMapping.put(new CType("GLuint", false, true),
66            new JType("java.nio.IntBuffer", true, false));
67    typeMapping.put(new CType("GLuint", true, true),
68            new JType("java.nio.IntBuffer", true, false));
69    typeMapping.put(new CType("GLshort", true, true),
70            new JType("java.nio.ShortBuffer", true, false));
71
72    // Typed pointers map to arrays + offsets
73    arrayTypeMapping.put(new CType("char", false, true),
74            new JType("byte", false, true));
75    arrayTypeMapping.put(new CType("GLboolean", false, true),
76                 new JType("boolean", false, true));
77    arrayTypeMapping.put(new CType("GLenum", false, true), new JType("int", false, true));
78    arrayTypeMapping.put(new CType("GLfixed", true, true), new JType("int", false, true));
79    arrayTypeMapping.put(new CType("GLfixed", false, true), new JType("int", false, true));
80    arrayTypeMapping.put(new CType("GLfloat", false, true), new JType("float", false, true));
81    arrayTypeMapping.put(new CType("GLfloat", true, true), new JType("float", false, true));
82    arrayTypeMapping.put(new CType("GLint", false, true), new JType("int", false, true));
83    arrayTypeMapping.put(new CType("GLint", true, true), new JType("int", false, true));
84    arrayTypeMapping.put(new CType("GLshort", true, true), new JType("short", false, true));
85    arrayTypeMapping.put(new CType("GLsizei", false, true), new JType("int", false, true));
86    arrayTypeMapping.put(new CType("GLsizei", true, true), new JType("int", false, true));
87    arrayTypeMapping.put(new CType("GLuint", false, true), new JType("int", false, true));
88    arrayTypeMapping.put(new CType("GLuint", true, true), new JType("int", false, true));
89    arrayTypeMapping.put(new CType("GLintptr"), new JType("int", false, true));
90    arrayTypeMapping.put(new CType("GLsizeiptr"), new JType("int", false, true));
91    }
92
93    public JType() {
94    }
95
96    public JType(String primitiveTypeName) {
97    this.baseType = primitiveTypeName;
98    this.isClass = false;
99    this.isArray = false;
100    }
101
102    public JType(String primitiveTypeName, boolean isClass, boolean isArray) {
103    this.baseType = primitiveTypeName;
104    this.isClass = isClass;
105    this.isArray = isArray;
106    }
107
108    public String getBaseType() {
109    return baseType;
110    }
111
112    @Override
113    public String toString() {
114    return baseType + (isArray ? "[]" : "");
115    }
116
117    public boolean isArray() {
118    return isArray;
119    }
120
121    public boolean isClass() {
122    return isClass;
123    }
124
125    public boolean isString() {
126        return baseType.equals("String");
127    }
128
129    public boolean isPrimitive() {
130    return !isClass() && !isArray();
131    }
132
133    public boolean isVoid() {
134    return baseType.equals("void");
135    }
136
137    public boolean isBuffer() {
138    return baseType.indexOf("Buffer") != -1;
139    }
140
141    public boolean isTypedBuffer() {
142    return !baseType.equals("java.nio.Buffer") &&
143        (baseType.indexOf("Buffer") != -1);
144    }
145
146    public static JType convert(CType ctype, boolean useArray) {
147     JType javaType = null;
148     if (useArray) {
149         javaType = arrayTypeMapping.get(ctype);
150     }
151     if (javaType == null) {
152         javaType = typeMapping.get(ctype);
153     }
154     if (javaType == null) {
155         throw new RuntimeException("Unsupported C type: " + ctype);
156     }
157     return javaType;
158    }
159}
160