OSDN Git Service

It's 2011 now.
[qt-creator-jp/qt-creator-jp.git] / src / shared / cplusplus / FullySpecifiedType.h
1 /**************************************************************************
2 **
3 ** This file is part of Qt Creator
4 **
5 ** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
6 **
7 ** Contact: Nokia Corporation (qt-info@nokia.com)
8 **
9 ** No Commercial Usage
10 **
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
14 ** this package.
15 **
16 ** GNU Lesser General Public License Usage
17 **
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.
24 **
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.
28 **
29 ** If you have questions regarding the use of this file, please contact
30 ** Nokia at qt-info@nokia.com.
31 **
32 **************************************************************************/
33 // Copyright (c) 2008 Roberto Raggi <roberto.raggi@gmail.com>
34 //
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:
41 //
42 // The above copyright notice and this permission notice shall be included in
43 // all copies or substantial portions of the Software.
44 //
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
51 // THE SOFTWARE.
52
53 #ifndef CPLUSPLUS_FULLYSPECIFIEDTYPE_H
54 #define CPLUSPLUS_FULLYSPECIFIEDTYPE_H
55
56 #include "CPlusPlusForwardDeclarations.h"
57
58
59 namespace CPlusPlus {
60
61 class CPLUSPLUS_EXPORT FullySpecifiedType
62 {
63 public:
64     FullySpecifiedType(Type *type = 0);
65     ~FullySpecifiedType();
66
67     bool isValid() const;
68     operator bool() const;
69
70     Type *type() const;
71     void setType(Type *type);
72
73     FullySpecifiedType qualifiedType() const;
74
75     bool isConst() const;
76     void setConst(bool isConst);
77
78     bool isVolatile() const;
79     void setVolatile(bool isVolatile);
80
81     bool isSigned() const;
82     void setSigned(bool isSigned);
83
84     bool isUnsigned() const;
85     void setUnsigned(bool isUnsigned);
86
87     bool isFriend() const;
88     void setFriend(bool isFriend);
89
90     bool isAuto() const;
91     void setAuto(bool isAuto);
92
93     bool isRegister() const;
94     void setRegister(bool isRegister);
95
96     bool isStatic() const;
97     void setStatic(bool isStatic);
98
99     bool isExtern() const;
100     void setExtern(bool isExtern);
101
102     bool isMutable() const;
103     void setMutable(bool isMutable);
104
105     bool isTypedef() const;
106     void setTypedef(bool isTypedef);
107
108     bool isInline() const;
109     void setInline(bool isInline);
110
111     bool isVirtual() const;
112     void setVirtual(bool isVirtual);
113
114     bool isExplicit() const;
115     void setExplicit(bool isExplicit);
116
117     bool isDeprecated() const;
118     void setDeprecated(bool isDeprecated);
119
120     bool isUnavailable() const;
121     void setUnavailable(bool isUnavailable);
122
123     bool isEqualTo(const FullySpecifiedType &other) const;
124
125     Type &operator*();
126     const Type &operator*() const;
127
128     Type *operator->();
129     const Type *operator->() const;
130
131     bool operator == (const FullySpecifiedType &other) const;
132     bool operator != (const FullySpecifiedType &other) const;
133     bool operator < (const FullySpecifiedType &other) const;
134
135     bool match(const FullySpecifiedType &otherTy, TypeMatcher *matcher) const;
136
137     FullySpecifiedType simplified() const;
138
139     void copySpecifiers(const FullySpecifiedType &type);
140
141     unsigned flags() const;
142     void setFlags(unsigned flags);
143
144 private:
145     Type *_type;
146     struct Flags {
147         // cv qualifiers
148         unsigned _isConst: 1;
149         unsigned _isVolatile: 1;
150
151         // sign
152         unsigned _isSigned: 1;
153         unsigned _isUnsigned: 1;
154
155         // storage class specifiers
156         unsigned _isFriend: 1;
157         unsigned _isAuto: 1;
158         unsigned _isRegister: 1;
159         unsigned _isStatic: 1;
160         unsigned _isExtern: 1;
161         unsigned _isMutable: 1;
162         unsigned _isTypedef: 1;
163
164         // function specifiers
165         unsigned _isInline: 1;
166         unsigned _isVirtual: 1;
167         unsigned _isExplicit: 1;
168
169         // speficiers from attributes
170         unsigned _isDeprecated: 1;
171         unsigned _isUnavailable: 1;
172     };
173     union {
174         unsigned _flags;
175         Flags f;
176     };
177 };
178
179 } // end of namespace CPlusPlus
180
181
182 #endif // CPLUSPLUS_FULLYSPECIFIEDTYPE_H