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