JType.java revision 7284145d564fa8a422a8e564a38c730fb4a2962b
1/*
2 * Copyright (C) 2006 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17import java.util.HashMap;
18
19public class JType {
20
21    String baseType;
22    boolean isArray;
23    boolean isClass;
24    boolean isString;
25
26    static HashMap<CType,JType> typeMapping = new HashMap<CType,JType>();
27    static HashMap<CType,JType> arrayTypeMapping = new HashMap<CType,JType>();
28
29    static {
30    // Primitive types
31    typeMapping.put(new CType("GLbitfield"), new JType("int"));
32    typeMapping.put(new CType("GLboolean"), new JType("boolean"));
33    typeMapping.put(new CType("GLclampf"), new JType("float"));
34    typeMapping.put(new CType("GLclampx"), new JType("int"));
35    typeMapping.put(new CType("GLenum"), new JType("int"));
36    typeMapping.put(new CType("GLfloat"), new JType("float"));
37    typeMapping.put(new CType("GLfixed"), new JType("int"));
38    typeMapping.put(new CType("GLint"), new JType("int"));
39    typeMapping.put(new CType("GLintptr"), new JType("int"));
40    typeMapping.put(new CType("GLshort"), new JType("short"));
41    typeMapping.put(new CType("GLsizei"), new JType("int"));
42    typeMapping.put(new CType("GLsizeiptr"), new JType("int"));
43    typeMapping.put(new CType("GLubyte"), new JType("byte"));
44    typeMapping.put(new CType("GLuint"), new JType("int"));
45    typeMapping.put(new CType("void"), new JType("void"));
46    typeMapping.put(new CType("GLubyte", true, true), new JType("String", false, false));
47    typeMapping.put(new CType("char", false, true), new JType("byte"));
48    typeMapping.put(new CType("char", true, true), new JType("String", false, false));
49    typeMapping.put(new CType("int"), new JType("int"));
50
51    // EGL primitive types
52    typeMapping.put(new CType("EGLint"), new JType("int"));
53    typeMapping.put(new CType("EGLBoolean"), new JType("boolean"));
54    typeMapping.put(new CType("EGLenum"), new JType("int"));
55    typeMapping.put(new CType("EGLNativePixmapType"), new JType("int"));
56    typeMapping.put(new CType("EGLNativeWindowType"), new JType("int"));
57    typeMapping.put(new CType("EGLNativeDisplayType"), new JType("int"));
58    typeMapping.put(new CType("EGLClientBuffer"), new JType("int"));
59    typeMapping.put(new CType("EGLnsecsANDROID"), new JType("long"));
60
61    // EGL nonprimitive types
62    typeMapping.put(new CType("EGLConfig"), new JType("EGLConfig", true, false));
63    typeMapping.put(new CType("EGLContext"), new JType("EGLContext", true, false));
64    typeMapping.put(new CType("EGLDisplay"), new JType("EGLDisplay", true, false));
65    typeMapping.put(new CType("EGLSurface"), new JType("EGLSurface", true, false));
66
67
68    // Untyped pointers map to untyped Buffers
69    typeMapping.put(new CType("GLvoid", true, true),
70            new JType("java.nio.Buffer", true, false));
71    typeMapping.put(new CType("GLvoid", false, true),
72            new JType("java.nio.Buffer", true, false));
73    typeMapping.put(new CType("void", false, true),
74            new JType("java.nio.Buffer", true, false));
75    typeMapping.put(new CType("GLeglImageOES", false, false),
76            new JType("java.nio.Buffer", true, false));
77
78    // Typed pointers map to typed Buffers
79    typeMapping.put(new CType("GLboolean", false, true),
80            new JType("java.nio.IntBuffer", true, false));
81    typeMapping.put(new CType("GLenum", false, true),
82            new JType("java.nio.IntBuffer", true, false));
83    typeMapping.put(new CType("GLfixed", false, true),
84            new JType("java.nio.IntBuffer", true, false));
85    typeMapping.put(new CType("GLfixed", true, true),
86            new JType("java.nio.IntBuffer", true, false));
87    typeMapping.put(new CType("GLfloat", false, true),
88            new JType("java.nio.FloatBuffer", true, false));
89    typeMapping.put(new CType("GLfloat", true, true),
90            new JType("java.nio.FloatBuffer", true, false));
91    typeMapping.put(new CType("GLint", false, true),
92            new JType("java.nio.IntBuffer", true, false));
93    typeMapping.put(new CType("GLint", true, true),
94            new JType("java.nio.IntBuffer", true, false));
95    typeMapping.put(new CType("GLsizei", false, true),
96            new JType("java.nio.IntBuffer", true, false));
97    typeMapping.put(new CType("GLuint", false, true),
98            new JType("java.nio.IntBuffer", true, false));
99    typeMapping.put(new CType("GLuint", true, true),
100            new JType("java.nio.IntBuffer", true, false));
101    typeMapping.put(new CType("GLshort", true, true),
102            new JType("java.nio.ShortBuffer", true, false));
103
104    // Typed pointers map to arrays + offsets
105    arrayTypeMapping.put(new CType("char", false, true),
106            new JType("byte", false, true));
107    arrayTypeMapping.put(new CType("GLboolean", false, true),
108            new JType("boolean", false, true));
109    arrayTypeMapping.put(new CType("GLenum", false, true), new JType("int", false, true));
110    arrayTypeMapping.put(new CType("GLfixed", true, true), new JType("int", false, true));
111    arrayTypeMapping.put(new CType("GLfixed", false, true), new JType("int", false, true));
112    arrayTypeMapping.put(new CType("GLfloat", false, true), new JType("float", false, true));
113    arrayTypeMapping.put(new CType("GLfloat", true, true), new JType("float", false, true));
114    arrayTypeMapping.put(new CType("GLint", false, true), new JType("int", false, true));
115    arrayTypeMapping.put(new CType("GLint", true, true), new JType("int", false, true));
116    arrayTypeMapping.put(new CType("GLshort", true, true), new JType("short", false, true));
117    arrayTypeMapping.put(new CType("GLsizei", false, true), new JType("int", false, true));
118    arrayTypeMapping.put(new CType("GLsizei", true, true), new JType("int", false, true));
119    arrayTypeMapping.put(new CType("GLuint", false, true), new JType("int", false, true));
120    arrayTypeMapping.put(new CType("GLuint", true, true), new JType("int", false, true));
121    arrayTypeMapping.put(new CType("GLintptr"), new JType("int", false, true));
122    arrayTypeMapping.put(new CType("GLsizeiptr"), new JType("int", false, true));
123
124    //EGL typed pointers map to arrays + offsets
125    arrayTypeMapping.put(new CType("EGLint", false, true), new JType("int", false, true));
126    arrayTypeMapping.put(new CType("EGLint", true, true), new JType("int", false, true));
127    arrayTypeMapping.put(new CType("EGLConfig", false, true), new JType("EGLConfig", true, true));
128    arrayTypeMapping.put(new CType("EGLConfig", true, true), new JType("EGLConfig", true, true));
129
130    }
131
132    public JType() {
133    }
134
135    public JType(String primitiveTypeName) {
136    this.baseType = primitiveTypeName;
137    this.isClass = false;
138    this.isArray = false;
139    }
140
141    public JType(String primitiveTypeName, boolean isClass, boolean isArray) {
142    this.baseType = primitiveTypeName;
143    this.isClass = isClass;
144    this.isArray = isArray;
145    }
146
147    public String getBaseType() {
148    return baseType;
149    }
150
151    @Override
152    public String toString() {
153    return baseType + (isArray ? "[]" : "");
154    }
155
156    public boolean isArray() {
157    return isArray;
158    }
159
160    public boolean isClass() {
161    return isClass;
162    }
163
164    public boolean isString() {
165        return baseType.equals("String");
166    }
167
168    public boolean isPrimitive() {
169    return !isClass() && !isArray();
170    }
171
172    public boolean isVoid() {
173    return baseType.equals("void");
174    }
175
176    public boolean isBuffer() {
177    return baseType.indexOf("Buffer") != -1;
178    }
179
180    public boolean isTypedBuffer() {
181    return !baseType.equals("java.nio.Buffer") &&
182        (baseType.indexOf("Buffer") != -1);
183    }
184
185    public boolean isEGLHandle() {
186    return !isPrimitive() &&
187        (baseType.startsWith("EGL"));
188    }
189
190    public static JType convert(CType ctype, boolean useArray) {
191     JType javaType = null;
192     if (useArray) {
193         javaType = arrayTypeMapping.get(ctype);
194     }
195     if (javaType == null) {
196         javaType = typeMapping.get(ctype);
197     }
198     if (javaType == null) {
199         throw new RuntimeException("Unsupported C type: " + ctype);
200     }
201     return javaType;
202    }
203}
204