1bd393b7f39a71a13893aea8b64474b0b07ebe0ddKenny Root/*
2bd393b7f39a71a13893aea8b64474b0b07ebe0ddKenny Root * Copyright (C) 2006 The Android Open Source Project
3bd393b7f39a71a13893aea8b64474b0b07ebe0ddKenny Root *
4bd393b7f39a71a13893aea8b64474b0b07ebe0ddKenny Root * Licensed under the Apache License, Version 2.0 (the "License");
5bd393b7f39a71a13893aea8b64474b0b07ebe0ddKenny Root * you may not use this file except in compliance with the License.
6bd393b7f39a71a13893aea8b64474b0b07ebe0ddKenny Root * You may obtain a copy of the License at
7bd393b7f39a71a13893aea8b64474b0b07ebe0ddKenny Root *
8bd393b7f39a71a13893aea8b64474b0b07ebe0ddKenny Root *      http://www.apache.org/licenses/LICENSE-2.0
9bd393b7f39a71a13893aea8b64474b0b07ebe0ddKenny Root *
10bd393b7f39a71a13893aea8b64474b0b07ebe0ddKenny Root * Unless required by applicable law or agreed to in writing, software
11bd393b7f39a71a13893aea8b64474b0b07ebe0ddKenny Root * distributed under the License is distributed on an "AS IS" BASIS,
12bd393b7f39a71a13893aea8b64474b0b07ebe0ddKenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13bd393b7f39a71a13893aea8b64474b0b07ebe0ddKenny Root * See the License for the specific language governing permissions and
14bd393b7f39a71a13893aea8b64474b0b07ebe0ddKenny Root * limitations under the License.
15bd393b7f39a71a13893aea8b64474b0b07ebe0ddKenny Root */
16412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich
17412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevichimport java.util.HashMap;
18412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich
19412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevichpublic class JType {
20412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich
21412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    String baseType;
22412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    boolean isArray;
23412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    boolean isClass;
2450d0b14689b0ae95ea7b66a8c2f7b955115812ddJack Palevich    boolean isString;
25412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich
26412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    static HashMap<CType,JType> typeMapping = new HashMap<CType,JType>();
27412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    static HashMap<CType,JType> arrayTypeMapping = new HashMap<CType,JType>();
28412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich
29412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    static {
30412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    // Primitive types
31412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    typeMapping.put(new CType("GLbitfield"), new JType("int"));
32412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    typeMapping.put(new CType("GLboolean"), new JType("boolean"));
33412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    typeMapping.put(new CType("GLclampf"), new JType("float"));
34412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    typeMapping.put(new CType("GLclampx"), new JType("int"));
35412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    typeMapping.put(new CType("GLenum"), new JType("int"));
36412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    typeMapping.put(new CType("GLfloat"), new JType("float"));
37412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    typeMapping.put(new CType("GLfixed"), new JType("int"));
38412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    typeMapping.put(new CType("GLint"), new JType("int"));
39412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    typeMapping.put(new CType("GLintptr"), new JType("int"));
40412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    typeMapping.put(new CType("GLshort"), new JType("short"));
41412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    typeMapping.put(new CType("GLsizei"), new JType("int"));
42412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    typeMapping.put(new CType("GLsizeiptr"), new JType("int"));
43412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    typeMapping.put(new CType("GLubyte"), new JType("byte"));
44412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    typeMapping.put(new CType("GLuint"), new JType("int"));
45412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    typeMapping.put(new CType("void"), new JType("void"));
4650d0b14689b0ae95ea7b66a8c2f7b955115812ddJack Palevich    typeMapping.put(new CType("GLubyte", true, true), new JType("String", false, false));
478a59ca73f2434f0e19321351e38229314c173e4fPablo Ceballos    typeMapping.put(new CType("char"), new JType("byte"));
4850d0b14689b0ae95ea7b66a8c2f7b955115812ddJack Palevich    typeMapping.put(new CType("char", true, true), new JType("String", false, false));
490eb6ad563825b97aec760a893db0eead10fe0ae6Jesse Hall    typeMapping.put(new CType("GLchar", true, true), new JType("String", false, false));
5050d0b14689b0ae95ea7b66a8c2f7b955115812ddJack Palevich    typeMapping.put(new CType("int"), new JType("int"));
5168fc8bbced285a8a2b716e5fe1900968ad8ba7d3Jesse Hall    typeMapping.put(new CType("GLuint64"), new JType("long"));
5268fc8bbced285a8a2b716e5fe1900968ad8ba7d3Jesse Hall    typeMapping.put(new CType("GLsync"), new JType("long"));
53412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich
5466a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    // EGL primitive types
5566a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    typeMapping.put(new CType("EGLint"), new JType("int"));
5666a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    typeMapping.put(new CType("EGLBoolean"), new JType("boolean"));
5766a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    typeMapping.put(new CType("EGLenum"), new JType("int"));
5866a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    typeMapping.put(new CType("EGLNativePixmapType"), new JType("int"));
5966a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    typeMapping.put(new CType("EGLNativeWindowType"), new JType("int"));
60ab6fc2a86f34be455c144a2d691e94909998c959Ashok Bhat    typeMapping.put(new CType("EGLNativeDisplayType"), new JType("long"));
61ab6fc2a86f34be455c144a2d691e94909998c959Ashok Bhat    typeMapping.put(new CType("EGLClientBuffer"), new JType("long"));
627284145d564fa8a422a8e564a38c730fb4a2962bAndy McFadden    typeMapping.put(new CType("EGLnsecsANDROID"), new JType("long"));
6366a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
6466a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    // EGL nonprimitive types
6566a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    typeMapping.put(new CType("EGLConfig"), new JType("EGLConfig", true, false));
6666a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    typeMapping.put(new CType("EGLContext"), new JType("EGLContext", true, false));
6766a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    typeMapping.put(new CType("EGLDisplay"), new JType("EGLDisplay", true, false));
6866a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    typeMapping.put(new CType("EGLSurface"), new JType("EGLSurface", true, false));
6966a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
7066a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
71412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    // Untyped pointers map to untyped Buffers
72412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    typeMapping.put(new CType("GLvoid", true, true),
73412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich            new JType("java.nio.Buffer", true, false));
74412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    typeMapping.put(new CType("GLvoid", false, true),
75412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich            new JType("java.nio.Buffer", true, false));
76412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    typeMapping.put(new CType("void", false, true),
77412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich            new JType("java.nio.Buffer", true, false));
788a59ca73f2434f0e19321351e38229314c173e4fPablo Ceballos    typeMapping.put(new CType("void", true, true),
798a59ca73f2434f0e19321351e38229314c173e4fPablo Ceballos            new JType("java.nio.Buffer", true, false));
80412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    typeMapping.put(new CType("GLeglImageOES", false, false),
81412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich            new JType("java.nio.Buffer", true, false));
82412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich
83412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    // Typed pointers map to typed Buffers
84412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    typeMapping.put(new CType("GLboolean", false, true),
85412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich            new JType("java.nio.IntBuffer", true, false));
8650d0b14689b0ae95ea7b66a8c2f7b955115812ddJack Palevich    typeMapping.put(new CType("GLenum", false, true),
8750d0b14689b0ae95ea7b66a8c2f7b955115812ddJack Palevich            new JType("java.nio.IntBuffer", true, false));
880eb6ad563825b97aec760a893db0eead10fe0ae6Jesse Hall    typeMapping.put(new CType("GLenum", true, true),
890eb6ad563825b97aec760a893db0eead10fe0ae6Jesse Hall            new JType("java.nio.IntBuffer", true, false));
90412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    typeMapping.put(new CType("GLfixed", false, true),
91412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich            new JType("java.nio.IntBuffer", true, false));
92412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    typeMapping.put(new CType("GLfixed", true, true),
93412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich            new JType("java.nio.IntBuffer", true, false));
94412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    typeMapping.put(new CType("GLfloat", false, true),
95412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich            new JType("java.nio.FloatBuffer", true, false));
96412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    typeMapping.put(new CType("GLfloat", true, true),
97412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich            new JType("java.nio.FloatBuffer", true, false));
98412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    typeMapping.put(new CType("GLint", false, true),
99412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich            new JType("java.nio.IntBuffer", true, false));
100412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    typeMapping.put(new CType("GLint", true, true),
101412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich            new JType("java.nio.IntBuffer", true, false));
10250d0b14689b0ae95ea7b66a8c2f7b955115812ddJack Palevich    typeMapping.put(new CType("GLsizei", false, true),
10350d0b14689b0ae95ea7b66a8c2f7b955115812ddJack Palevich            new JType("java.nio.IntBuffer", true, false));
104412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    typeMapping.put(new CType("GLuint", false, true),
105412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich            new JType("java.nio.IntBuffer", true, false));
106412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    typeMapping.put(new CType("GLuint", true, true),
107412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich            new JType("java.nio.IntBuffer", true, false));
108412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    typeMapping.put(new CType("GLshort", true, true),
109412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich            new JType("java.nio.ShortBuffer", true, false));
11068fc8bbced285a8a2b716e5fe1900968ad8ba7d3Jesse Hall    typeMapping.put(new CType("GLint64", false, true),
11168fc8bbced285a8a2b716e5fe1900968ad8ba7d3Jesse Hall            new JType("java.nio.LongBuffer", true, false));
112412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich
113412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    // Typed pointers map to arrays + offsets
11450d0b14689b0ae95ea7b66a8c2f7b955115812ddJack Palevich    arrayTypeMapping.put(new CType("char", false, true),
11550d0b14689b0ae95ea7b66a8c2f7b955115812ddJack Palevich            new JType("byte", false, true));
1168a59ca73f2434f0e19321351e38229314c173e4fPablo Ceballos    arrayTypeMapping.put(new CType("GLchar", false, true),
1178a59ca73f2434f0e19321351e38229314c173e4fPablo Ceballos            new JType("byte", false, true));
118412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    arrayTypeMapping.put(new CType("GLboolean", false, true),
11966a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer            new JType("boolean", false, true));
12050d0b14689b0ae95ea7b66a8c2f7b955115812ddJack Palevich    arrayTypeMapping.put(new CType("GLenum", false, true), new JType("int", false, true));
1210eb6ad563825b97aec760a893db0eead10fe0ae6Jesse Hall    arrayTypeMapping.put(new CType("GLenum", true, true), new JType("int", false, true));
122412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    arrayTypeMapping.put(new CType("GLfixed", true, true), new JType("int", false, true));
123412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    arrayTypeMapping.put(new CType("GLfixed", false, true), new JType("int", false, true));
124412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    arrayTypeMapping.put(new CType("GLfloat", false, true), new JType("float", false, true));
125412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    arrayTypeMapping.put(new CType("GLfloat", true, true), new JType("float", false, true));
126412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    arrayTypeMapping.put(new CType("GLint", false, true), new JType("int", false, true));
127412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    arrayTypeMapping.put(new CType("GLint", true, true), new JType("int", false, true));
128412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    arrayTypeMapping.put(new CType("GLshort", true, true), new JType("short", false, true));
12950d0b14689b0ae95ea7b66a8c2f7b955115812ddJack Palevich    arrayTypeMapping.put(new CType("GLsizei", false, true), new JType("int", false, true));
13050d0b14689b0ae95ea7b66a8c2f7b955115812ddJack Palevich    arrayTypeMapping.put(new CType("GLsizei", true, true), new JType("int", false, true));
131412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    arrayTypeMapping.put(new CType("GLuint", false, true), new JType("int", false, true));
132412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    arrayTypeMapping.put(new CType("GLuint", true, true), new JType("int", false, true));
133412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    arrayTypeMapping.put(new CType("GLintptr"), new JType("int", false, true));
134412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    arrayTypeMapping.put(new CType("GLsizeiptr"), new JType("int", false, true));
13568fc8bbced285a8a2b716e5fe1900968ad8ba7d3Jesse Hall    arrayTypeMapping.put(new CType("GLint64", false, true), new JType("long", false, true));
13666a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
13766a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    //EGL typed pointers map to arrays + offsets
13866a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    arrayTypeMapping.put(new CType("EGLint", false, true), new JType("int", false, true));
13966a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    arrayTypeMapping.put(new CType("EGLint", true, true), new JType("int", false, true));
14066a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    arrayTypeMapping.put(new CType("EGLConfig", false, true), new JType("EGLConfig", true, true));
14166a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    arrayTypeMapping.put(new CType("EGLConfig", true, true), new JType("EGLConfig", true, true));
14266a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
143412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    }
144412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich
145412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    public JType() {
146412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    }
147412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich
148412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    public JType(String primitiveTypeName) {
149412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    this.baseType = primitiveTypeName;
150412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    this.isClass = false;
151412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    this.isArray = false;
152412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    }
153412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich
154412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    public JType(String primitiveTypeName, boolean isClass, boolean isArray) {
155412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    this.baseType = primitiveTypeName;
156412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    this.isClass = isClass;
157412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    this.isArray = isArray;
158412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    }
159412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich
160412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    public String getBaseType() {
161412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    return baseType;
162412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    }
163412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich
164412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    @Override
165412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    public String toString() {
166412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    return baseType + (isArray ? "[]" : "");
167412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    }
168412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich
169412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    public boolean isArray() {
170412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    return isArray;
171412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    }
172412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich
173412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    public boolean isClass() {
174412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    return isClass;
175412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    }
176412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich
17750d0b14689b0ae95ea7b66a8c2f7b955115812ddJack Palevich    public boolean isString() {
17850d0b14689b0ae95ea7b66a8c2f7b955115812ddJack Palevich        return baseType.equals("String");
17950d0b14689b0ae95ea7b66a8c2f7b955115812ddJack Palevich    }
18050d0b14689b0ae95ea7b66a8c2f7b955115812ddJack Palevich
181412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    public boolean isPrimitive() {
182412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    return !isClass() && !isArray();
183412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    }
184412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich
185412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    public boolean isVoid() {
186412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    return baseType.equals("void");
187412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    }
188412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich
189412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    public boolean isBuffer() {
190412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    return baseType.indexOf("Buffer") != -1;
191412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    }
192412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich
193412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    public boolean isTypedBuffer() {
194412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    return !baseType.equals("java.nio.Buffer") &&
195412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich        (baseType.indexOf("Buffer") != -1);
196412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    }
197412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich
1984e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi    public JType getArrayTypeForTypedBuffer() {
1994e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi      if (!isTypedBuffer()) {
2004e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi          throw new RuntimeException("Not typed buffer type " + this);
2014e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi      }
2024e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi      switch (baseType) {
2034e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        case "java.nio.ByteBuffer":
2044e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi          return new JType("byte", false, true);
2054e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        case "java.nio.BooleanBuffer":
2064e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi          return new JType("boolean", false, true);
2074e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        case "java.nio.ShortBuffer":
2084e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi          return new JType("short", false, true);
2094e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        case "java.nio.CharBuffer":
2104e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi          return new JType("char", false, true);
2114e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        case "java.nio.IntBuffer":
2124e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi          return new JType("int", false, true);
2134e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        case "java.nio.LongBuffer":
2144e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi          return new JType("long", false, true);
2154e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        case "java.nio.FloatBuffer":
2164e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi          return new JType("float", false, true);
2174e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        case "java.nio.DoubleBuffer":
2184e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi          return new JType("double", false, true);
2194e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        default:
2204e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi          throw new RuntimeException("Unknown typed buffer type " + this);
2214e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi      }
2224e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi    }
2234e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi
2244e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi    public String getArrayGetterForPrimitiveArray() {
2254e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi      if (!isArray() || isClass()) {
2264e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi          throw new RuntimeException("Not array type " + this);
2274e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi      }
2284e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi      switch (baseType) {
2294e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        case "byte":
2304e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi          return "GetByteArrayElements";
2314e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        case "boolean":
2324e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi          return "GetBooleanArrayElements";
2334e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        case "short":
2344e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi          return "GetShortArrayElements";
2354e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        case "char":
2364e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi          return "GetCharArrayElements";
2374e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        case "int":
2384e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi          return "GetIntArrayElements";
2394e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        case "long":
2404e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi          return "GetLongArrayElements";
2414e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        case "float":
2424e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi          return "GetFloatArrayElements";
2434e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        case "double":
2444e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi          return "GetDoubleArrayElements";
2454e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        default:
2464e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi          throw new RuntimeException("Unknown array type " + this);
2474e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi      }
2484e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi    }
2494e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi
2504e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi    public String getArrayReleaserForPrimitiveArray() {
2514e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi      if (!isArray() || isClass()) {
2524e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi          throw new RuntimeException("Not array type " + this);
2534e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi      }
2544e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi      switch (baseType) {
2554e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        case "byte":
2564e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi          return "ReleaseByteArrayElements";
2574e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        case "boolean":
2584e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi          return "ReleaseBooleanArrayElements";
2594e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        case "short":
2604e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi          return "ReleaseShortArrayElements";
2614e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        case "char":
2624e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi          return "ReleaseCharArrayElements";
2634e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        case "int":
2644e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi          return "ReleaseIntArrayElements";
2654e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        case "long":
2664e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi          return "ReleaseLongArrayElements";
2674e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        case "float":
2684e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi          return "ReleaseFloatArrayElements";
2694e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        case "double":
2704e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi          return "ReleaseDoubleArrayElements";
2714e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        default:
2724e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi          throw new RuntimeException("Unknown array type " + this);
2734e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi      }
2744e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi    }
2754e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi
27666a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    public boolean isEGLHandle() {
27766a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    return !isPrimitive() &&
27866a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer        (baseType.startsWith("EGL"));
27966a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    }
28066a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
281412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    public static JType convert(CType ctype, boolean useArray) {
282412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich     JType javaType = null;
283412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich     if (useArray) {
284412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich         javaType = arrayTypeMapping.get(ctype);
285412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich     }
286412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich     if (javaType == null) {
287412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich         javaType = typeMapping.get(ctype);
288412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich     }
289412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich     if (javaType == null) {
290412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich         throw new RuntimeException("Unsupported C type: " + ctype);
291412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich     }
292412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich     return javaType;
293412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich    }
294412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich}
295