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 Palevichpublic class CType { 18412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich 19412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich String baseType; 20412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich boolean isConst; 21412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich boolean isPointer; 22412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich 23412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich public CType() { 24412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } 25412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich 26412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich public CType(String baseType) { 27412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich setBaseType(baseType); 28412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } 29412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich 30412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich public CType(String baseType, boolean isConst, boolean isPointer) { 31412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich setBaseType(baseType); 32412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich setIsConst(isConst); 33412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich setIsPointer(isPointer); 34412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } 35412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich 36412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich public String getDeclaration() { 37412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich return baseType + (isPointer ? " *" : ""); 38412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } 39412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich 40412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich public void setIsConst(boolean isConst) { 41412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich this.isConst = isConst; 42412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } 43412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich 44412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich public boolean isConst() { 45412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich return isConst; 46412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } 47412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich 48412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich public void setIsPointer(boolean isPointer) { 49412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich this.isPointer = isPointer; 50412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } 51412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich 52412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich public boolean isPointer() { 53412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich return isPointer; 54412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } 55412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich 5666a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer public boolean isEGLHandle() { 5766a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer if(baseType.equals("EGLContext") 5866a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer || baseType.equals("EGLConfig") 5966a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer || baseType.equals("EGLSurface") 6066a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer || baseType.equals("EGLDisplay")) { 6166a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer return true; 6266a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer } 6366a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer return false; 6466a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer } 6566a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer 66412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich boolean isVoid() { 67412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich String baseType = getBaseType(); 68412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich return baseType.equals("GLvoid") || 69412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich baseType.equals("void"); 70412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } 71412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich 7250d0b14689b0ae95ea7b66a8c2f7b955115812ddJack Palevich public boolean isConstCharPointer() { 7350d0b14689b0ae95ea7b66a8c2f7b955115812ddJack Palevich return isConst && isPointer && baseType.equals("char"); 7450d0b14689b0ae95ea7b66a8c2f7b955115812ddJack Palevich } 7550d0b14689b0ae95ea7b66a8c2f7b955115812ddJack Palevich 76412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich public boolean isTypedPointer() { 7750d0b14689b0ae95ea7b66a8c2f7b955115812ddJack Palevich return isPointer() && !isVoid() && !isConstCharPointer(); 78412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } 79412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich 80412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich public void setBaseType(String baseType) { 81412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich this.baseType = baseType; 82412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } 83412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich 84412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich public String getBaseType() { 85412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich return baseType; 86412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } 87412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich 88412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich @Override 89412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich public String toString() { 90412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich String s = ""; 91412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich if (isConst()) { 92412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich s += "const "; 93412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } 94412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich s += baseType; 95412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich if (isPointer()) { 96412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich s += "*"; 97412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } 98412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich 99412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich return s; 100412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } 101412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich 102412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich @Override 103412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich public int hashCode() { 104412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich return baseType.hashCode() ^ (isPointer ? 2 : 0) ^ (isConst ? 1 : 0); 105412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } 106412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich 107412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich @Override 108412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich public boolean equals(Object o) { 109412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich if (o != null && o instanceof CType) { 110412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich CType c = (CType)o; 111412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich return baseType.equals(c.baseType) && 112412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich isPointer() == c.isPointer() && 113412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich isConst() == c.isConst(); 114412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } 115412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich return false; 116412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } 117412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich} 118