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