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