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 56412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich boolean isVoid() { 57412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich String baseType = getBaseType(); 58412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich return baseType.equals("GLvoid") || 59412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich baseType.equals("void"); 60412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } 61412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich 6250d0b14689b0ae95ea7b66a8c2f7b955115812ddJack Palevich public boolean isConstCharPointer() { 6350d0b14689b0ae95ea7b66a8c2f7b955115812ddJack Palevich return isConst && isPointer && baseType.equals("char"); 6450d0b14689b0ae95ea7b66a8c2f7b955115812ddJack Palevich } 6550d0b14689b0ae95ea7b66a8c2f7b955115812ddJack Palevich 66412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich public boolean isTypedPointer() { 6750d0b14689b0ae95ea7b66a8c2f7b955115812ddJack Palevich return isPointer() && !isVoid() && !isConstCharPointer(); 68412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } 69412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich 70412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich public void setBaseType(String baseType) { 71412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich this.baseType = baseType; 72412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } 73412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich 74412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich public String getBaseType() { 75412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich return baseType; 76412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } 77412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich 78412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich @Override 79412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich public String toString() { 80412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich String s = ""; 81412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich if (isConst()) { 82412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich s += "const "; 83412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } 84412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich s += baseType; 85412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich if (isPointer()) { 86412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich s += "*"; 87412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } 88412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich 89412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich return s; 90412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } 91412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich 92412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich @Override 93412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich public int hashCode() { 94412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich return baseType.hashCode() ^ (isPointer ? 2 : 0) ^ (isConst ? 1 : 0); 95412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } 96412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich 97412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich @Override 98412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich public boolean equals(Object o) { 99412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich if (o != null && o instanceof CType) { 100412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich CType c = (CType)o; 101412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich return baseType.equals(c.baseType) && 102412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich isPointer() == c.isPointer() && 103412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich isConst() == c.isConst(); 104412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } 105412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich return false; 106412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } 107412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich} 108