Home | History | Annotate | Download | only in src
      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 
     17 import java.util.HashMap;
     18 
     19 public 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     // Untyped pointers map to untyped Buffers
     52     typeMapping.put(new CType("GLvoid", true, true),
     53             new JType("java.nio.Buffer", true, false));
     54     typeMapping.put(new CType("GLvoid", false, true),
     55             new JType("java.nio.Buffer", true, false));
     56     typeMapping.put(new CType("void", false, true),
     57             new JType("java.nio.Buffer", true, false));
     58     typeMapping.put(new CType("GLeglImageOES", false, false),
     59             new JType("java.nio.Buffer", true, false));
     60 
     61     // Typed pointers map to typed Buffers
     62     typeMapping.put(new CType("GLboolean", false, true),
     63             new JType("java.nio.IntBuffer", true, false));
     64     typeMapping.put(new CType("GLenum", false, true),
     65             new JType("java.nio.IntBuffer", true, false));
     66     typeMapping.put(new CType("GLfixed", false, true),
     67             new JType("java.nio.IntBuffer", true, false));
     68     typeMapping.put(new CType("GLfixed", true, true),
     69             new JType("java.nio.IntBuffer", true, false));
     70     typeMapping.put(new CType("GLfloat", false, true),
     71             new JType("java.nio.FloatBuffer", true, false));
     72     typeMapping.put(new CType("GLfloat", true, true),
     73             new JType("java.nio.FloatBuffer", true, false));
     74     typeMapping.put(new CType("GLint", false, true),
     75             new JType("java.nio.IntBuffer", true, false));
     76     typeMapping.put(new CType("GLint", true, true),
     77             new JType("java.nio.IntBuffer", true, false));
     78     typeMapping.put(new CType("GLsizei", false, true),
     79             new JType("java.nio.IntBuffer", true, false));
     80     typeMapping.put(new CType("GLuint", false, true),
     81             new JType("java.nio.IntBuffer", true, false));
     82     typeMapping.put(new CType("GLuint", true, true),
     83             new JType("java.nio.IntBuffer", true, false));
     84     typeMapping.put(new CType("GLshort", true, true),
     85             new JType("java.nio.ShortBuffer", true, false));
     86 
     87     // Typed pointers map to arrays + offsets
     88     arrayTypeMapping.put(new CType("char", false, true),
     89             new JType("byte", false, true));
     90     arrayTypeMapping.put(new CType("GLboolean", false, true),
     91                  new JType("boolean", false, true));
     92     arrayTypeMapping.put(new CType("GLenum", false, true), new JType("int", false, true));
     93     arrayTypeMapping.put(new CType("GLfixed", true, true), new JType("int", false, true));
     94     arrayTypeMapping.put(new CType("GLfixed", false, true), new JType("int", false, true));
     95     arrayTypeMapping.put(new CType("GLfloat", false, true), new JType("float", false, true));
     96     arrayTypeMapping.put(new CType("GLfloat", true, true), new JType("float", false, true));
     97     arrayTypeMapping.put(new CType("GLint", false, true), new JType("int", false, true));
     98     arrayTypeMapping.put(new CType("GLint", true, true), new JType("int", false, true));
     99     arrayTypeMapping.put(new CType("GLshort", true, true), new JType("short", false, true));
    100     arrayTypeMapping.put(new CType("GLsizei", false, true), new JType("int", false, true));
    101     arrayTypeMapping.put(new CType("GLsizei", true, true), new JType("int", false, true));
    102     arrayTypeMapping.put(new CType("GLuint", false, true), new JType("int", false, true));
    103     arrayTypeMapping.put(new CType("GLuint", true, true), new JType("int", false, true));
    104     arrayTypeMapping.put(new CType("GLintptr"), new JType("int", false, true));
    105     arrayTypeMapping.put(new CType("GLsizeiptr"), new JType("int", false, true));
    106     }
    107 
    108     public JType() {
    109     }
    110 
    111     public JType(String primitiveTypeName) {
    112     this.baseType = primitiveTypeName;
    113     this.isClass = false;
    114     this.isArray = false;
    115     }
    116 
    117     public JType(String primitiveTypeName, boolean isClass, boolean isArray) {
    118     this.baseType = primitiveTypeName;
    119     this.isClass = isClass;
    120     this.isArray = isArray;
    121     }
    122 
    123     public String getBaseType() {
    124     return baseType;
    125     }
    126 
    127     @Override
    128     public String toString() {
    129     return baseType + (isArray ? "[]" : "");
    130     }
    131 
    132     public boolean isArray() {
    133     return isArray;
    134     }
    135 
    136     public boolean isClass() {
    137     return isClass;
    138     }
    139 
    140     public boolean isString() {
    141         return baseType.equals("String");
    142     }
    143 
    144     public boolean isPrimitive() {
    145     return !isClass() && !isArray();
    146     }
    147 
    148     public boolean isVoid() {
    149     return baseType.equals("void");
    150     }
    151 
    152     public boolean isBuffer() {
    153     return baseType.indexOf("Buffer") != -1;
    154     }
    155 
    156     public boolean isTypedBuffer() {
    157     return !baseType.equals("java.nio.Buffer") &&
    158         (baseType.indexOf("Buffer") != -1);
    159     }
    160 
    161     public static JType convert(CType ctype, boolean useArray) {
    162      JType javaType = null;
    163      if (useArray) {
    164          javaType = arrayTypeMapping.get(ctype);
    165      }
    166      if (javaType == null) {
    167          javaType = typeMapping.get(ctype);
    168      }
    169      if (javaType == null) {
    170          throw new RuntimeException("Unsupported C type: " + ctype);
    171      }
    172      return javaType;
    173     }
    174 }
    175