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_FULLYSPECIFIEDTYPE_H
54 #define CPLUSPLUS_FULLYSPECIFIEDTYPE_H
56 #include "CPlusPlusForwardDeclarations.h"
61 class CPLUSPLUS_EXPORT FullySpecifiedType
64 FullySpecifiedType(Type *type = 0);
65 ~FullySpecifiedType();
68 operator bool() const;
71 void setType(Type *type);
73 FullySpecifiedType qualifiedType() const;
76 void setConst(bool isConst);
78 bool isVolatile() const;
79 void setVolatile(bool isVolatile);
81 bool isSigned() const;
82 void setSigned(bool isSigned);
84 bool isUnsigned() const;
85 void setUnsigned(bool isUnsigned);
87 bool isFriend() const;
88 void setFriend(bool isFriend);
91 void setAuto(bool isAuto);
93 bool isRegister() const;
94 void setRegister(bool isRegister);
96 bool isStatic() const;
97 void setStatic(bool isStatic);
99 bool isExtern() const;
100 void setExtern(bool isExtern);
102 bool isMutable() const;
103 void setMutable(bool isMutable);
105 bool isTypedef() const;
106 void setTypedef(bool isTypedef);
108 bool isInline() const;
109 void setInline(bool isInline);
111 bool isVirtual() const;
112 void setVirtual(bool isVirtual);
114 bool isExplicit() const;
115 void setExplicit(bool isExplicit);
117 bool isDeprecated() const;
118 void setDeprecated(bool isDeprecated);
120 bool isUnavailable() const;
121 void setUnavailable(bool isUnavailable);
123 bool isEqualTo(const FullySpecifiedType &other) const;
126 const Type &operator*() const;
129 const Type *operator->() const;
131 bool operator == (const FullySpecifiedType &other) const;
132 bool operator != (const FullySpecifiedType &other) const;
133 bool operator < (const FullySpecifiedType &other) const;
135 bool match(const FullySpecifiedType &otherTy, TypeMatcher *matcher) const;
137 FullySpecifiedType simplified() const;
139 void copySpecifiers(const FullySpecifiedType &type);
141 unsigned flags() const;
142 void setFlags(unsigned flags);
148 unsigned _isConst: 1;
149 unsigned _isVolatile: 1;
152 unsigned _isSigned: 1;
153 unsigned _isUnsigned: 1;
155 // storage class specifiers
156 unsigned _isFriend: 1;
158 unsigned _isRegister: 1;
159 unsigned _isStatic: 1;
160 unsigned _isExtern: 1;
161 unsigned _isMutable: 1;
162 unsigned _isTypedef: 1;
164 // function specifiers
165 unsigned _isInline: 1;
166 unsigned _isVirtual: 1;
167 unsigned _isExplicit: 1;
169 // speficiers from attributes
170 unsigned _isDeprecated: 1;
171 unsigned _isUnavailable: 1;
179 } // end of namespace CPlusPlus
182 #endif // CPLUSPLUS_FULLYSPECIFIEDTYPE_H