1 /**************************************************************************
3 ** This file is part of Qt Creator
5 ** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
7 ** Contact: Nokia Corporation (qt-info@nokia.com)
11 ** This file contains pre-release code and may not be distributed.
12 ** You may use this file in accordance with the terms and conditions
13 ** contained in the Technology Preview License Agreement accompanying
16 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 2.1 requirements
23 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
25 ** In addition, as a special exception, Nokia gives you certain additional
26 ** rights. These rights are described in the Nokia Qt LGPL Exception
27 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
29 ** If you have questions regarding the use of this file, please contact
30 ** Nokia at qt-info@nokia.com.
32 **************************************************************************/
33 // Copyright (c) 2008 Roberto Raggi <roberto.raggi@gmail.com>
35 // Permission is hereby granted, free of charge, to any person obtaining a copy
36 // of this software and associated documentation files (the "Software"), to deal
37 // in the Software without restriction, including without limitation the rights
38 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
39 // copies of the Software, and to permit persons to whom the Software is
40 // furnished to do so, subject to the following conditions:
42 // The above copyright notice and this permission notice shall be included in
43 // all copies or substantial portions of the Software.
45 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
46 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
47 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
48 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
49 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
50 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
53 #ifndef CPLUSPLUS_TYPE_H
54 #define CPLUSPLUS_TYPE_H
56 #include "CPlusPlusForwardDeclarations.h"
60 class CPLUSPLUS_EXPORT Type
66 bool isUndefinedType() const;
67 bool isVoidType() const;
68 bool isIntegerType() const;
69 bool isFloatType() const;
70 bool isPointerType() const;
71 bool isPointerToMemberType() const;
72 bool isReferenceType() const;
73 bool isArrayType() const;
74 bool isNamedType() const;
75 bool isFunctionType() const;
76 bool isNamespaceType() const;
77 bool isTemplateType() const;
78 bool isClassType() const;
79 bool isEnumType() const;
80 bool isForwardClassDeclarationType() const;
81 bool isObjCClassType() const;
82 bool isObjCProtocolType() const;
83 bool isObjCMethodType() const;
84 bool isObjCForwardClassDeclarationType() const;
85 bool isObjCForwardProtocolDeclarationType() const;
87 virtual const UndefinedType *asUndefinedType() const { return 0; }
88 virtual const VoidType *asVoidType() const { return 0; }
89 virtual const IntegerType *asIntegerType() const { return 0; }
90 virtual const FloatType *asFloatType() const { return 0; }
91 virtual const PointerType *asPointerType() const { return 0; }
92 virtual const PointerToMemberType *asPointerToMemberType() const { return 0; }
93 virtual const ReferenceType *asReferenceType() const { return 0; }
94 virtual const ArrayType *asArrayType() const { return 0; }
95 virtual const NamedType *asNamedType() const { return 0; }
96 virtual const Function *asFunctionType() const { return 0; }
97 virtual const Namespace *asNamespaceType() const { return 0; }
98 virtual const Template *asTemplateType() const { return 0; }
99 virtual const Class *asClassType() const { return 0; }
100 virtual const Enum *asEnumType() const { return 0; }
101 virtual const ForwardClassDeclaration *asForwardClassDeclarationType() const { return 0; }
102 virtual const ObjCClass *asObjCClassType() const { return 0; }
103 virtual const ObjCProtocol *asObjCProtocolType() const { return 0; }
104 virtual const ObjCMethod *asObjCMethodType() const { return 0; }
105 virtual const ObjCForwardClassDeclaration *asObjCForwardClassDeclarationType() const { return 0; }
106 virtual const ObjCForwardProtocolDeclaration *asObjCForwardProtocolDeclarationType() const { return 0; }
108 virtual UndefinedType *asUndefinedType() { return 0; }
109 virtual VoidType *asVoidType() { return 0; }
110 virtual IntegerType *asIntegerType() { return 0; }
111 virtual FloatType *asFloatType() { return 0; }
112 virtual PointerType *asPointerType() { return 0; }
113 virtual PointerToMemberType *asPointerToMemberType() { return 0; }
114 virtual ReferenceType *asReferenceType() { return 0; }
115 virtual ArrayType *asArrayType() { return 0; }
116 virtual NamedType *asNamedType() { return 0; }
117 virtual Function *asFunctionType() { return 0; }
118 virtual Namespace *asNamespaceType() { return 0; }
119 virtual Template *asTemplateType() { return 0; }
120 virtual Class *asClassType() { return 0; }
121 virtual Enum *asEnumType() { return 0; }
122 virtual ForwardClassDeclaration *asForwardClassDeclarationType() { return 0; }
123 virtual ObjCClass *asObjCClassType() { return 0; }
124 virtual ObjCProtocol *asObjCProtocolType() { return 0; }
125 virtual ObjCMethod *asObjCMethodType() { return 0; }
126 virtual ObjCForwardClassDeclaration *asObjCForwardClassDeclarationType() { return 0; }
127 virtual ObjCForwardProtocolDeclaration *asObjCForwardProtocolDeclarationType() { return 0; }
129 void accept(TypeVisitor *visitor);
130 static void accept(Type *type, TypeVisitor *visitor);
132 static bool matchType(const Type *type, const Type *otherType, TypeMatcher *matcher)
135 return type == otherType;
137 return type->matchType(otherType, matcher);
140 bool matchType(const Type *otherType, TypeMatcher *matcher) const;
142 virtual bool isEqualTo(const Type *other) const = 0; // ### remove
145 virtual void accept0(TypeVisitor *visitor) = 0;
146 virtual bool matchType0(const Type *otherType, TypeMatcher *matcher) const = 0;
149 } // namespace CPlusPlus
152 #endif // CPLUSPLUS_TYPE_H