115a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root/* 215a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * Copyright (C) 2006 The Android Open Source Project 315a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * 415a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * Licensed under the Apache License, Version 2.0 (the "License"); 515a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * you may not use this file except in compliance with the License. 615a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * You may obtain a copy of the License at 715a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * 815a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * http://www.apache.org/licenses/LICENSE-2.0 915a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * 1015a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * Unless required by applicable law or agreed to in writing, software 1115a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * distributed under the License is distributed on an "AS IS" BASIS, 1215a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1315a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * See the License for the specific language governing permissions and 1415a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * limitations under the License. 1515a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root */ 161c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 171c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevichimport java.util.HashMap; 181c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 191c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevichpublic class JType { 201c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 211c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich String baseType; 221c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich boolean isArray; 231c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich boolean isClass; 24560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich boolean isString; 251c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 261c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich static HashMap<CType,JType> typeMapping = new HashMap<CType,JType>(); 271c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich static HashMap<CType,JType> arrayTypeMapping = new HashMap<CType,JType>(); 281c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 291c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich static { 301c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich // Primitive types 311c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich typeMapping.put(new CType("GLbitfield"), new JType("int")); 321c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich typeMapping.put(new CType("GLboolean"), new JType("boolean")); 331c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich typeMapping.put(new CType("GLclampf"), new JType("float")); 341c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich typeMapping.put(new CType("GLclampx"), new JType("int")); 351c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich typeMapping.put(new CType("GLenum"), new JType("int")); 361c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich typeMapping.put(new CType("GLfloat"), new JType("float")); 371c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich typeMapping.put(new CType("GLfixed"), new JType("int")); 381c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich typeMapping.put(new CType("GLint"), new JType("int")); 391c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich typeMapping.put(new CType("GLintptr"), new JType("int")); 401c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich typeMapping.put(new CType("GLshort"), new JType("short")); 411c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich typeMapping.put(new CType("GLsizei"), new JType("int")); 421c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich typeMapping.put(new CType("GLsizeiptr"), new JType("int")); 431c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich typeMapping.put(new CType("GLubyte"), new JType("byte")); 441c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich typeMapping.put(new CType("GLuint"), new JType("int")); 451c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich typeMapping.put(new CType("void"), new JType("void")); 46560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich typeMapping.put(new CType("GLubyte", true, true), new JType("String", false, false)); 47560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich typeMapping.put(new CType("char", false, true), new JType("byte")); 48560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich typeMapping.put(new CType("char", true, true), new JType("String", false, false)); 49560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich typeMapping.put(new CType("int"), new JType("int")); 501c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 511c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich // Untyped pointers map to untyped Buffers 521c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich typeMapping.put(new CType("GLvoid", true, true), 531c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich new JType("java.nio.Buffer", true, false)); 541c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich typeMapping.put(new CType("GLvoid", false, true), 551c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich new JType("java.nio.Buffer", true, false)); 561c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich typeMapping.put(new CType("void", false, true), 571c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich new JType("java.nio.Buffer", true, false)); 581c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich typeMapping.put(new CType("GLeglImageOES", false, false), 591c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich new JType("java.nio.Buffer", true, false)); 601c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 611c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich // Typed pointers map to typed Buffers 621c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich typeMapping.put(new CType("GLboolean", false, true), 631c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich new JType("java.nio.IntBuffer", true, false)); 64560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich typeMapping.put(new CType("GLenum", false, true), 65560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich new JType("java.nio.IntBuffer", true, false)); 661c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich typeMapping.put(new CType("GLfixed", false, true), 671c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich new JType("java.nio.IntBuffer", true, false)); 681c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich typeMapping.put(new CType("GLfixed", true, true), 691c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich new JType("java.nio.IntBuffer", true, false)); 701c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich typeMapping.put(new CType("GLfloat", false, true), 711c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich new JType("java.nio.FloatBuffer", true, false)); 721c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich typeMapping.put(new CType("GLfloat", true, true), 731c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich new JType("java.nio.FloatBuffer", true, false)); 741c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich typeMapping.put(new CType("GLint", false, true), 751c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich new JType("java.nio.IntBuffer", true, false)); 761c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich typeMapping.put(new CType("GLint", true, true), 771c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich new JType("java.nio.IntBuffer", true, false)); 78560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich typeMapping.put(new CType("GLsizei", false, true), 79560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich new JType("java.nio.IntBuffer", true, false)); 801c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich typeMapping.put(new CType("GLuint", false, true), 811c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich new JType("java.nio.IntBuffer", true, false)); 821c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich typeMapping.put(new CType("GLuint", true, true), 831c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich new JType("java.nio.IntBuffer", true, false)); 841c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich typeMapping.put(new CType("GLshort", true, true), 851c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich new JType("java.nio.ShortBuffer", true, false)); 861c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 871c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich // Typed pointers map to arrays + offsets 88560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich arrayTypeMapping.put(new CType("char", false, true), 89560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich new JType("byte", false, true)); 901c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich arrayTypeMapping.put(new CType("GLboolean", false, true), 911c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich new JType("boolean", false, true)); 92560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich arrayTypeMapping.put(new CType("GLenum", false, true), new JType("int", false, true)); 931c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich arrayTypeMapping.put(new CType("GLfixed", true, true), new JType("int", false, true)); 941c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich arrayTypeMapping.put(new CType("GLfixed", false, true), new JType("int", false, true)); 951c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich arrayTypeMapping.put(new CType("GLfloat", false, true), new JType("float", false, true)); 961c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich arrayTypeMapping.put(new CType("GLfloat", true, true), new JType("float", false, true)); 971c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich arrayTypeMapping.put(new CType("GLint", false, true), new JType("int", false, true)); 981c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich arrayTypeMapping.put(new CType("GLint", true, true), new JType("int", false, true)); 991c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich arrayTypeMapping.put(new CType("GLshort", true, true), new JType("short", false, true)); 100560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich arrayTypeMapping.put(new CType("GLsizei", false, true), new JType("int", false, true)); 101560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich arrayTypeMapping.put(new CType("GLsizei", true, true), new JType("int", false, true)); 1021c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich arrayTypeMapping.put(new CType("GLuint", false, true), new JType("int", false, true)); 1031c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich arrayTypeMapping.put(new CType("GLuint", true, true), new JType("int", false, true)); 1041c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich arrayTypeMapping.put(new CType("GLintptr"), new JType("int", false, true)); 1051c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich arrayTypeMapping.put(new CType("GLsizeiptr"), new JType("int", false, true)); 1061c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich } 1071c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 1081c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich public JType() { 1091c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich } 1101c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 1111c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich public JType(String primitiveTypeName) { 1121c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich this.baseType = primitiveTypeName; 1131c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich this.isClass = false; 1141c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich this.isArray = false; 1151c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich } 1161c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 1171c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich public JType(String primitiveTypeName, boolean isClass, boolean isArray) { 1181c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich this.baseType = primitiveTypeName; 1191c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich this.isClass = isClass; 1201c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich this.isArray = isArray; 1211c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich } 1221c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 1231c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich public String getBaseType() { 1241c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich return baseType; 1251c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich } 1261c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 1271c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich @Override 1281c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich public String toString() { 1291c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich return baseType + (isArray ? "[]" : ""); 1301c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich } 1311c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 1321c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich public boolean isArray() { 1331c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich return isArray; 1341c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich } 1351c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 1361c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich public boolean isClass() { 1371c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich return isClass; 1381c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich } 1391c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 140560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich public boolean isString() { 141560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich return baseType.equals("String"); 142560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich } 143560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich 1441c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich public boolean isPrimitive() { 1451c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich return !isClass() && !isArray(); 1461c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich } 1471c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 1481c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich public boolean isVoid() { 1491c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich return baseType.equals("void"); 1501c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich } 1511c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 1521c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich public boolean isBuffer() { 1531c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich return baseType.indexOf("Buffer") != -1; 1541c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich } 1551c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 1561c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich public boolean isTypedBuffer() { 1571c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich return !baseType.equals("java.nio.Buffer") && 1581c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich (baseType.indexOf("Buffer") != -1); 1591c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich } 1601c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 1611c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich public static JType convert(CType ctype, boolean useArray) { 1621c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich JType javaType = null; 1631c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich if (useArray) { 1641c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich javaType = arrayTypeMapping.get(ctype); 1651c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich } 1661c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich if (javaType == null) { 1671c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich javaType = typeMapping.get(ctype); 1681c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich } 1691c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich if (javaType == null) { 1701c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich throw new RuntimeException("Unsupported C type: " + ctype); 1711c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich } 1721c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich return javaType; 1731c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich } 1741c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich} 175