annotate generator/parser/codemodel.h @ 1:e78566595089

initial import
author mandel
date Mon, 11 May 2009 16:01:50 +0000
parents
children 09a0f1d048f2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
e78566595089 initial import
mandel
parents:
diff changeset
1 /****************************************************************************
e78566595089 initial import
mandel
parents:
diff changeset
2 **
e78566595089 initial import
mandel
parents:
diff changeset
3 ** Copyright (C) 1992-2008 Nokia. All rights reserved.
e78566595089 initial import
mandel
parents:
diff changeset
4 ** Copyright (C) 2002-2005 Roberto Raggi <roberto@kdevelop.org>
e78566595089 initial import
mandel
parents:
diff changeset
5 **
e78566595089 initial import
mandel
parents:
diff changeset
6 ** This file is part of Qt Jambi.
e78566595089 initial import
mandel
parents:
diff changeset
7 **
e78566595089 initial import
mandel
parents:
diff changeset
8 ** * Commercial Usage
e78566595089 initial import
mandel
parents:
diff changeset
9 * Licensees holding valid Qt Commercial licenses may use this file in
e78566595089 initial import
mandel
parents:
diff changeset
10 * accordance with the Qt Commercial License Agreement provided with the
e78566595089 initial import
mandel
parents:
diff changeset
11 * Software or, alternatively, in accordance with the terms contained in
e78566595089 initial import
mandel
parents:
diff changeset
12 * a written agreement between you and Nokia.
e78566595089 initial import
mandel
parents:
diff changeset
13 *
e78566595089 initial import
mandel
parents:
diff changeset
14 *
e78566595089 initial import
mandel
parents:
diff changeset
15 * GNU General Public License Usage
e78566595089 initial import
mandel
parents:
diff changeset
16 * Alternatively, this file may be used under the terms of the GNU
e78566595089 initial import
mandel
parents:
diff changeset
17 * General Public License versions 2.0 or 3.0 as published by the Free
e78566595089 initial import
mandel
parents:
diff changeset
18 * Software Foundation and appearing in the file LICENSE.GPL included in
e78566595089 initial import
mandel
parents:
diff changeset
19 * the packaging of this file. Please review the following information
e78566595089 initial import
mandel
parents:
diff changeset
20 * to ensure GNU General Public Licensing requirements will be met:
e78566595089 initial import
mandel
parents:
diff changeset
21 * http://www.fsf.org/licensing/licenses/info/GPLv2.html and
e78566595089 initial import
mandel
parents:
diff changeset
22 * http://www.gnu.org/copyleft/gpl.html. In addition, as a special
e78566595089 initial import
mandel
parents:
diff changeset
23 * exception, Nokia gives you certain additional rights. These rights
e78566595089 initial import
mandel
parents:
diff changeset
24 * are described in the Nokia Qt GPL Exception version 1.2, included in
e78566595089 initial import
mandel
parents:
diff changeset
25 * the file GPL_EXCEPTION.txt in this package.
e78566595089 initial import
mandel
parents:
diff changeset
26 *
e78566595089 initial import
mandel
parents:
diff changeset
27 * Qt for Windows(R) Licensees
e78566595089 initial import
mandel
parents:
diff changeset
28 * As a special exception, Nokia, as the sole copyright holder for Qt
e78566595089 initial import
mandel
parents:
diff changeset
29 * Designer, grants users of the Qt/Eclipse Integration plug-in the
e78566595089 initial import
mandel
parents:
diff changeset
30 * right for the Qt/Eclipse Integration to link to functionality
e78566595089 initial import
mandel
parents:
diff changeset
31 * provided by Qt Designer and its related libraries.
e78566595089 initial import
mandel
parents:
diff changeset
32 *
e78566595089 initial import
mandel
parents:
diff changeset
33 *
e78566595089 initial import
mandel
parents:
diff changeset
34 * If you are unsure which license is appropriate for your use, please
e78566595089 initial import
mandel
parents:
diff changeset
35 * contact the sales department at qt-sales@nokia.com.
e78566595089 initial import
mandel
parents:
diff changeset
36
e78566595089 initial import
mandel
parents:
diff changeset
37 **
e78566595089 initial import
mandel
parents:
diff changeset
38 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
e78566595089 initial import
mandel
parents:
diff changeset
39 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
e78566595089 initial import
mandel
parents:
diff changeset
40 **
e78566595089 initial import
mandel
parents:
diff changeset
41 ****************************************************************************/
e78566595089 initial import
mandel
parents:
diff changeset
42
e78566595089 initial import
mandel
parents:
diff changeset
43
e78566595089 initial import
mandel
parents:
diff changeset
44 #ifndef CODEMODEL_H
e78566595089 initial import
mandel
parents:
diff changeset
45 #define CODEMODEL_H
e78566595089 initial import
mandel
parents:
diff changeset
46
e78566595089 initial import
mandel
parents:
diff changeset
47 #include "codemodel_fwd.h"
e78566595089 initial import
mandel
parents:
diff changeset
48 #include <codemodel_pointer.h>
e78566595089 initial import
mandel
parents:
diff changeset
49
e78566595089 initial import
mandel
parents:
diff changeset
50 #include <QtCore/QHash>
e78566595089 initial import
mandel
parents:
diff changeset
51 #include <QtCore/QList>
e78566595089 initial import
mandel
parents:
diff changeset
52 #include <QtCore/QString>
e78566595089 initial import
mandel
parents:
diff changeset
53 #include <QtCore/QStringList>
e78566595089 initial import
mandel
parents:
diff changeset
54 #include <QtCore/QVector>
e78566595089 initial import
mandel
parents:
diff changeset
55
e78566595089 initial import
mandel
parents:
diff changeset
56 #define DECLARE_MODEL_NODE(k) \
e78566595089 initial import
mandel
parents:
diff changeset
57 enum { __node_kind = Kind_##k }; \
e78566595089 initial import
mandel
parents:
diff changeset
58 typedef CodeModelPointer<k##ModelItem> Pointer;
e78566595089 initial import
mandel
parents:
diff changeset
59
e78566595089 initial import
mandel
parents:
diff changeset
60 template <class _Target, class _Source>
e78566595089 initial import
mandel
parents:
diff changeset
61 _Target model_static_cast(_Source item)
e78566595089 initial import
mandel
parents:
diff changeset
62 {
e78566595089 initial import
mandel
parents:
diff changeset
63 typedef typename _Target::Type * _Target_pointer;
e78566595089 initial import
mandel
parents:
diff changeset
64
e78566595089 initial import
mandel
parents:
diff changeset
65 _Target ptr (static_cast<_Target_pointer>(item.data()));
e78566595089 initial import
mandel
parents:
diff changeset
66 return ptr;
e78566595089 initial import
mandel
parents:
diff changeset
67 }
e78566595089 initial import
mandel
parents:
diff changeset
68
e78566595089 initial import
mandel
parents:
diff changeset
69 class CodeModel
e78566595089 initial import
mandel
parents:
diff changeset
70 {
e78566595089 initial import
mandel
parents:
diff changeset
71 public:
e78566595089 initial import
mandel
parents:
diff changeset
72 enum AccessPolicy
e78566595089 initial import
mandel
parents:
diff changeset
73 {
e78566595089 initial import
mandel
parents:
diff changeset
74 Public,
e78566595089 initial import
mandel
parents:
diff changeset
75 Protected,
e78566595089 initial import
mandel
parents:
diff changeset
76 Private
e78566595089 initial import
mandel
parents:
diff changeset
77 };
e78566595089 initial import
mandel
parents:
diff changeset
78
e78566595089 initial import
mandel
parents:
diff changeset
79 enum FunctionType
e78566595089 initial import
mandel
parents:
diff changeset
80 {
e78566595089 initial import
mandel
parents:
diff changeset
81 Normal,
e78566595089 initial import
mandel
parents:
diff changeset
82 Signal,
e78566595089 initial import
mandel
parents:
diff changeset
83 Slot
e78566595089 initial import
mandel
parents:
diff changeset
84 };
e78566595089 initial import
mandel
parents:
diff changeset
85
e78566595089 initial import
mandel
parents:
diff changeset
86 enum ClassType
e78566595089 initial import
mandel
parents:
diff changeset
87 {
e78566595089 initial import
mandel
parents:
diff changeset
88 Class,
e78566595089 initial import
mandel
parents:
diff changeset
89 Struct,
e78566595089 initial import
mandel
parents:
diff changeset
90 Union
e78566595089 initial import
mandel
parents:
diff changeset
91 };
e78566595089 initial import
mandel
parents:
diff changeset
92
e78566595089 initial import
mandel
parents:
diff changeset
93 public:
e78566595089 initial import
mandel
parents:
diff changeset
94 CodeModel();
e78566595089 initial import
mandel
parents:
diff changeset
95 virtual ~CodeModel();
e78566595089 initial import
mandel
parents:
diff changeset
96
e78566595089 initial import
mandel
parents:
diff changeset
97 template <class _Target> _Target create()
e78566595089 initial import
mandel
parents:
diff changeset
98 {
e78566595089 initial import
mandel
parents:
diff changeset
99 typedef typename _Target::Type _Target_type;
e78566595089 initial import
mandel
parents:
diff changeset
100
e78566595089 initial import
mandel
parents:
diff changeset
101 _Target result = _Target_type::create(this);
e78566595089 initial import
mandel
parents:
diff changeset
102 result->setCreationId(_M_creation_id++);
e78566595089 initial import
mandel
parents:
diff changeset
103 return result;
e78566595089 initial import
mandel
parents:
diff changeset
104 }
e78566595089 initial import
mandel
parents:
diff changeset
105
e78566595089 initial import
mandel
parents:
diff changeset
106 FileList files() const;
e78566595089 initial import
mandel
parents:
diff changeset
107 NamespaceModelItem globalNamespace() const;
e78566595089 initial import
mandel
parents:
diff changeset
108
e78566595089 initial import
mandel
parents:
diff changeset
109 void addFile(FileModelItem item);
e78566595089 initial import
mandel
parents:
diff changeset
110 void removeFile(FileModelItem item);
e78566595089 initial import
mandel
parents:
diff changeset
111 FileModelItem findFile(const QString &name) const;
e78566595089 initial import
mandel
parents:
diff changeset
112 QHash<QString, FileModelItem> fileMap() const;
e78566595089 initial import
mandel
parents:
diff changeset
113
e78566595089 initial import
mandel
parents:
diff changeset
114 CodeModelItem findItem(const QStringList &qualifiedName, CodeModelItem scope) const;
e78566595089 initial import
mandel
parents:
diff changeset
115
e78566595089 initial import
mandel
parents:
diff changeset
116 void wipeout();
e78566595089 initial import
mandel
parents:
diff changeset
117
e78566595089 initial import
mandel
parents:
diff changeset
118 private:
e78566595089 initial import
mandel
parents:
diff changeset
119 QHash<QString, FileModelItem> _M_files;
e78566595089 initial import
mandel
parents:
diff changeset
120 NamespaceModelItem _M_globalNamespace;
e78566595089 initial import
mandel
parents:
diff changeset
121 std::size_t _M_creation_id;
e78566595089 initial import
mandel
parents:
diff changeset
122
e78566595089 initial import
mandel
parents:
diff changeset
123 private:
e78566595089 initial import
mandel
parents:
diff changeset
124 CodeModel(const CodeModel &other);
e78566595089 initial import
mandel
parents:
diff changeset
125 void operator = (const CodeModel &other);
e78566595089 initial import
mandel
parents:
diff changeset
126 };
e78566595089 initial import
mandel
parents:
diff changeset
127
e78566595089 initial import
mandel
parents:
diff changeset
128 class TypeInfo
e78566595089 initial import
mandel
parents:
diff changeset
129 {
e78566595089 initial import
mandel
parents:
diff changeset
130 public:
e78566595089 initial import
mandel
parents:
diff changeset
131 TypeInfo(const TypeInfo &other)
e78566595089 initial import
mandel
parents:
diff changeset
132 : flags(other.flags),
e78566595089 initial import
mandel
parents:
diff changeset
133 m_qualifiedName(other.m_qualifiedName),
e78566595089 initial import
mandel
parents:
diff changeset
134 m_arrayElements(other.m_arrayElements),
e78566595089 initial import
mandel
parents:
diff changeset
135 m_arguments(other.m_arguments)
e78566595089 initial import
mandel
parents:
diff changeset
136 {
e78566595089 initial import
mandel
parents:
diff changeset
137 }
e78566595089 initial import
mandel
parents:
diff changeset
138
e78566595089 initial import
mandel
parents:
diff changeset
139 TypeInfo():
e78566595089 initial import
mandel
parents:
diff changeset
140 flags (0) {}
e78566595089 initial import
mandel
parents:
diff changeset
141
e78566595089 initial import
mandel
parents:
diff changeset
142 QStringList qualifiedName() const { return m_qualifiedName; }
e78566595089 initial import
mandel
parents:
diff changeset
143 void setQualifiedName(const QStringList &qualified_name) { m_qualifiedName = qualified_name; }
e78566595089 initial import
mandel
parents:
diff changeset
144
e78566595089 initial import
mandel
parents:
diff changeset
145 bool isConstant() const { return m_constant; }
e78566595089 initial import
mandel
parents:
diff changeset
146 void setConstant(bool is) { m_constant = is; }
e78566595089 initial import
mandel
parents:
diff changeset
147
e78566595089 initial import
mandel
parents:
diff changeset
148 bool isVolatile() const { return m_volatile; }
e78566595089 initial import
mandel
parents:
diff changeset
149 void setVolatile(bool is) { m_volatile = is; }
e78566595089 initial import
mandel
parents:
diff changeset
150
e78566595089 initial import
mandel
parents:
diff changeset
151 bool isReference() const { return m_reference; }
e78566595089 initial import
mandel
parents:
diff changeset
152 void setReference(bool is) { m_reference = is; }
e78566595089 initial import
mandel
parents:
diff changeset
153
e78566595089 initial import
mandel
parents:
diff changeset
154 int indirections() const { return m_indirections; }
e78566595089 initial import
mandel
parents:
diff changeset
155 void setIndirections(int indirections) { m_indirections = indirections; }
e78566595089 initial import
mandel
parents:
diff changeset
156
e78566595089 initial import
mandel
parents:
diff changeset
157 bool isFunctionPointer() const { return m_functionPointer; }
e78566595089 initial import
mandel
parents:
diff changeset
158 void setFunctionPointer(bool is) { m_functionPointer = is; }
e78566595089 initial import
mandel
parents:
diff changeset
159
e78566595089 initial import
mandel
parents:
diff changeset
160 QStringList arrayElements() const { return m_arrayElements; }
e78566595089 initial import
mandel
parents:
diff changeset
161 void setArrayElements(const QStringList &arrayElements) { m_arrayElements = arrayElements; }
e78566595089 initial import
mandel
parents:
diff changeset
162
e78566595089 initial import
mandel
parents:
diff changeset
163 QList<TypeInfo> arguments() const { return m_arguments; }
e78566595089 initial import
mandel
parents:
diff changeset
164 void setArguments(const QList<TypeInfo> &arguments);
e78566595089 initial import
mandel
parents:
diff changeset
165 void addArgument(const TypeInfo &arg) { m_arguments.append(arg); }
e78566595089 initial import
mandel
parents:
diff changeset
166
e78566595089 initial import
mandel
parents:
diff changeset
167 bool operator==(const TypeInfo &other);
e78566595089 initial import
mandel
parents:
diff changeset
168 bool operator!=(const TypeInfo &other) { return !(*this==other); }
e78566595089 initial import
mandel
parents:
diff changeset
169
e78566595089 initial import
mandel
parents:
diff changeset
170 // ### arrays and templates??
e78566595089 initial import
mandel
parents:
diff changeset
171
e78566595089 initial import
mandel
parents:
diff changeset
172 QString toString() const;
e78566595089 initial import
mandel
parents:
diff changeset
173
e78566595089 initial import
mandel
parents:
diff changeset
174 static TypeInfo combine (const TypeInfo &__lhs, const TypeInfo &__rhs);
e78566595089 initial import
mandel
parents:
diff changeset
175 static TypeInfo resolveType (TypeInfo const &__type, CodeModelItem __scope);
e78566595089 initial import
mandel
parents:
diff changeset
176
e78566595089 initial import
mandel
parents:
diff changeset
177 private:
e78566595089 initial import
mandel
parents:
diff changeset
178 union
e78566595089 initial import
mandel
parents:
diff changeset
179 {
e78566595089 initial import
mandel
parents:
diff changeset
180 uint flags;
e78566595089 initial import
mandel
parents:
diff changeset
181
e78566595089 initial import
mandel
parents:
diff changeset
182 struct
e78566595089 initial import
mandel
parents:
diff changeset
183 {
e78566595089 initial import
mandel
parents:
diff changeset
184 uint m_constant: 1;
e78566595089 initial import
mandel
parents:
diff changeset
185 uint m_volatile: 1;
e78566595089 initial import
mandel
parents:
diff changeset
186 uint m_reference: 1;
e78566595089 initial import
mandel
parents:
diff changeset
187 uint m_functionPointer: 1;
e78566595089 initial import
mandel
parents:
diff changeset
188 uint m_indirections: 6;
e78566595089 initial import
mandel
parents:
diff changeset
189 uint m_padding: 22;
e78566595089 initial import
mandel
parents:
diff changeset
190 };
e78566595089 initial import
mandel
parents:
diff changeset
191 };
e78566595089 initial import
mandel
parents:
diff changeset
192
e78566595089 initial import
mandel
parents:
diff changeset
193 QStringList m_qualifiedName;
e78566595089 initial import
mandel
parents:
diff changeset
194 QStringList m_arrayElements;
e78566595089 initial import
mandel
parents:
diff changeset
195 QList<TypeInfo> m_arguments;
e78566595089 initial import
mandel
parents:
diff changeset
196 };
e78566595089 initial import
mandel
parents:
diff changeset
197
e78566595089 initial import
mandel
parents:
diff changeset
198 class _CodeModelItem: public QSharedData
e78566595089 initial import
mandel
parents:
diff changeset
199 {
e78566595089 initial import
mandel
parents:
diff changeset
200 public:
e78566595089 initial import
mandel
parents:
diff changeset
201 enum Kind
e78566595089 initial import
mandel
parents:
diff changeset
202 {
e78566595089 initial import
mandel
parents:
diff changeset
203 /* These are bit-flags resembling inheritance */
e78566595089 initial import
mandel
parents:
diff changeset
204 Kind_Scope = 0x1,
e78566595089 initial import
mandel
parents:
diff changeset
205 Kind_Namespace = 0x2 | Kind_Scope,
e78566595089 initial import
mandel
parents:
diff changeset
206 Kind_Member = 0x4,
e78566595089 initial import
mandel
parents:
diff changeset
207 Kind_Function = 0x8 | Kind_Member,
e78566595089 initial import
mandel
parents:
diff changeset
208 KindMask = 0xf,
e78566595089 initial import
mandel
parents:
diff changeset
209
e78566595089 initial import
mandel
parents:
diff changeset
210 /* These are for classes that are not inherited from */
e78566595089 initial import
mandel
parents:
diff changeset
211 FirstKind = 0x8,
e78566595089 initial import
mandel
parents:
diff changeset
212 Kind_Argument = 1 << FirstKind,
e78566595089 initial import
mandel
parents:
diff changeset
213 Kind_Class = 2 << FirstKind | Kind_Scope,
e78566595089 initial import
mandel
parents:
diff changeset
214 Kind_Enum = 3 << FirstKind,
e78566595089 initial import
mandel
parents:
diff changeset
215 Kind_Enumerator = 4 << FirstKind,
e78566595089 initial import
mandel
parents:
diff changeset
216 Kind_File = 5 << FirstKind | Kind_Namespace,
e78566595089 initial import
mandel
parents:
diff changeset
217 Kind_FunctionDefinition = 6 << FirstKind | Kind_Function,
e78566595089 initial import
mandel
parents:
diff changeset
218 Kind_TemplateParameter = 7 << FirstKind,
e78566595089 initial import
mandel
parents:
diff changeset
219 Kind_TypeAlias = 8 << FirstKind,
e78566595089 initial import
mandel
parents:
diff changeset
220 Kind_Variable = 9 << FirstKind | Kind_Member
e78566595089 initial import
mandel
parents:
diff changeset
221 };
e78566595089 initial import
mandel
parents:
diff changeset
222
e78566595089 initial import
mandel
parents:
diff changeset
223 public:
e78566595089 initial import
mandel
parents:
diff changeset
224 virtual ~_CodeModelItem();
e78566595089 initial import
mandel
parents:
diff changeset
225
e78566595089 initial import
mandel
parents:
diff changeset
226 int kind() const;
e78566595089 initial import
mandel
parents:
diff changeset
227
e78566595089 initial import
mandel
parents:
diff changeset
228 QStringList qualifiedName() const;
e78566595089 initial import
mandel
parents:
diff changeset
229
e78566595089 initial import
mandel
parents:
diff changeset
230 QString name() const;
e78566595089 initial import
mandel
parents:
diff changeset
231 void setName(const QString &name);
e78566595089 initial import
mandel
parents:
diff changeset
232
e78566595089 initial import
mandel
parents:
diff changeset
233 QStringList scope() const;
e78566595089 initial import
mandel
parents:
diff changeset
234 void setScope(const QStringList &scope);
e78566595089 initial import
mandel
parents:
diff changeset
235
e78566595089 initial import
mandel
parents:
diff changeset
236 QString fileName() const;
e78566595089 initial import
mandel
parents:
diff changeset
237 void setFileName(const QString &fileName);
e78566595089 initial import
mandel
parents:
diff changeset
238
e78566595089 initial import
mandel
parents:
diff changeset
239 FileModelItem file() const;
e78566595089 initial import
mandel
parents:
diff changeset
240
e78566595089 initial import
mandel
parents:
diff changeset
241 void getStartPosition(int *line, int *column);
e78566595089 initial import
mandel
parents:
diff changeset
242 void setStartPosition(int line, int column);
e78566595089 initial import
mandel
parents:
diff changeset
243
e78566595089 initial import
mandel
parents:
diff changeset
244 void getEndPosition(int *line, int *column);
e78566595089 initial import
mandel
parents:
diff changeset
245 void setEndPosition(int line, int column);
e78566595089 initial import
mandel
parents:
diff changeset
246
e78566595089 initial import
mandel
parents:
diff changeset
247 inline std::size_t creationId() const { return _M_creation_id; }
e78566595089 initial import
mandel
parents:
diff changeset
248 inline void setCreationId(std::size_t creation_id) { _M_creation_id = creation_id; }
e78566595089 initial import
mandel
parents:
diff changeset
249
e78566595089 initial import
mandel
parents:
diff changeset
250 inline CodeModel *model() const { return _M_model; }
e78566595089 initial import
mandel
parents:
diff changeset
251
e78566595089 initial import
mandel
parents:
diff changeset
252 CodeModelItem toItem() const;
e78566595089 initial import
mandel
parents:
diff changeset
253
e78566595089 initial import
mandel
parents:
diff changeset
254 protected:
e78566595089 initial import
mandel
parents:
diff changeset
255 _CodeModelItem(CodeModel *model, int kind);
e78566595089 initial import
mandel
parents:
diff changeset
256 void setKind(int kind);
e78566595089 initial import
mandel
parents:
diff changeset
257
e78566595089 initial import
mandel
parents:
diff changeset
258 private:
e78566595089 initial import
mandel
parents:
diff changeset
259 CodeModel *_M_model;
e78566595089 initial import
mandel
parents:
diff changeset
260 int _M_kind;
e78566595089 initial import
mandel
parents:
diff changeset
261 int _M_startLine;
e78566595089 initial import
mandel
parents:
diff changeset
262 int _M_startColumn;
e78566595089 initial import
mandel
parents:
diff changeset
263 int _M_endLine;
e78566595089 initial import
mandel
parents:
diff changeset
264 int _M_endColumn;
e78566595089 initial import
mandel
parents:
diff changeset
265 std::size_t _M_creation_id;
e78566595089 initial import
mandel
parents:
diff changeset
266 QString _M_name;
e78566595089 initial import
mandel
parents:
diff changeset
267 QString _M_fileName;
e78566595089 initial import
mandel
parents:
diff changeset
268 QStringList _M_scope;
e78566595089 initial import
mandel
parents:
diff changeset
269
e78566595089 initial import
mandel
parents:
diff changeset
270 private:
e78566595089 initial import
mandel
parents:
diff changeset
271 _CodeModelItem(const _CodeModelItem &other);
e78566595089 initial import
mandel
parents:
diff changeset
272 void operator = (const _CodeModelItem &other);
e78566595089 initial import
mandel
parents:
diff changeset
273 };
e78566595089 initial import
mandel
parents:
diff changeset
274
e78566595089 initial import
mandel
parents:
diff changeset
275 class _ScopeModelItem: public _CodeModelItem
e78566595089 initial import
mandel
parents:
diff changeset
276 {
e78566595089 initial import
mandel
parents:
diff changeset
277 public:
e78566595089 initial import
mandel
parents:
diff changeset
278 DECLARE_MODEL_NODE(Scope)
e78566595089 initial import
mandel
parents:
diff changeset
279
e78566595089 initial import
mandel
parents:
diff changeset
280 static ScopeModelItem create(CodeModel *model);
e78566595089 initial import
mandel
parents:
diff changeset
281
e78566595089 initial import
mandel
parents:
diff changeset
282 public:
e78566595089 initial import
mandel
parents:
diff changeset
283 ClassList classes() const;
e78566595089 initial import
mandel
parents:
diff changeset
284 EnumList enums() const;
e78566595089 initial import
mandel
parents:
diff changeset
285 FunctionDefinitionList functionDefinitions() const;
e78566595089 initial import
mandel
parents:
diff changeset
286 FunctionList functions() const;
e78566595089 initial import
mandel
parents:
diff changeset
287 TypeAliasList typeAliases() const;
e78566595089 initial import
mandel
parents:
diff changeset
288 VariableList variables() const;
e78566595089 initial import
mandel
parents:
diff changeset
289
e78566595089 initial import
mandel
parents:
diff changeset
290 void addClass(ClassModelItem item);
e78566595089 initial import
mandel
parents:
diff changeset
291 void addEnum(EnumModelItem item);
e78566595089 initial import
mandel
parents:
diff changeset
292 void addFunction(FunctionModelItem item);
e78566595089 initial import
mandel
parents:
diff changeset
293 void addFunctionDefinition(FunctionDefinitionModelItem item);
e78566595089 initial import
mandel
parents:
diff changeset
294 void addTypeAlias(TypeAliasModelItem item);
e78566595089 initial import
mandel
parents:
diff changeset
295 void addVariable(VariableModelItem item);
e78566595089 initial import
mandel
parents:
diff changeset
296
e78566595089 initial import
mandel
parents:
diff changeset
297 void removeClass(ClassModelItem item);
e78566595089 initial import
mandel
parents:
diff changeset
298 void removeEnum(EnumModelItem item);
e78566595089 initial import
mandel
parents:
diff changeset
299 void removeFunction(FunctionModelItem item);
e78566595089 initial import
mandel
parents:
diff changeset
300 void removeFunctionDefinition(FunctionDefinitionModelItem item);
e78566595089 initial import
mandel
parents:
diff changeset
301 void removeTypeAlias(TypeAliasModelItem item);
e78566595089 initial import
mandel
parents:
diff changeset
302 void removeVariable(VariableModelItem item);
e78566595089 initial import
mandel
parents:
diff changeset
303
e78566595089 initial import
mandel
parents:
diff changeset
304 ClassModelItem findClass(const QString &name) const;
e78566595089 initial import
mandel
parents:
diff changeset
305 EnumModelItem findEnum(const QString &name) const;
e78566595089 initial import
mandel
parents:
diff changeset
306 FunctionDefinitionList findFunctionDefinitions(const QString &name) const;
e78566595089 initial import
mandel
parents:
diff changeset
307 FunctionList findFunctions(const QString &name) const;
e78566595089 initial import
mandel
parents:
diff changeset
308 TypeAliasModelItem findTypeAlias(const QString &name) const;
e78566595089 initial import
mandel
parents:
diff changeset
309 VariableModelItem findVariable(const QString &name) const;
e78566595089 initial import
mandel
parents:
diff changeset
310
e78566595089 initial import
mandel
parents:
diff changeset
311 void addEnumsDeclaration(const QString &enumsDeclaration);
e78566595089 initial import
mandel
parents:
diff changeset
312 QStringList enumsDeclarations() const { return _M_enumsDeclarations; }
e78566595089 initial import
mandel
parents:
diff changeset
313
e78566595089 initial import
mandel
parents:
diff changeset
314 inline QHash<QString, ClassModelItem> classMap() const { return _M_classes; }
e78566595089 initial import
mandel
parents:
diff changeset
315 inline QHash<QString, EnumModelItem> enumMap() const { return _M_enums; }
e78566595089 initial import
mandel
parents:
diff changeset
316 inline QHash<QString, TypeAliasModelItem> typeAliasMap() const { return _M_typeAliases; }
e78566595089 initial import
mandel
parents:
diff changeset
317 inline QHash<QString, VariableModelItem> variableMap() const { return _M_variables; }
e78566595089 initial import
mandel
parents:
diff changeset
318 inline QMultiHash<QString, FunctionDefinitionModelItem> functionDefinitionMap() const { return _M_functionDefinitions; }
e78566595089 initial import
mandel
parents:
diff changeset
319 inline QMultiHash<QString, FunctionModelItem> functionMap() const { return _M_functions; }
e78566595089 initial import
mandel
parents:
diff changeset
320
e78566595089 initial import
mandel
parents:
diff changeset
321 FunctionModelItem declaredFunction(FunctionModelItem item);
e78566595089 initial import
mandel
parents:
diff changeset
322
e78566595089 initial import
mandel
parents:
diff changeset
323 protected:
e78566595089 initial import
mandel
parents:
diff changeset
324 _ScopeModelItem(CodeModel *model, int kind = __node_kind)
e78566595089 initial import
mandel
parents:
diff changeset
325 : _CodeModelItem(model, kind) {}
e78566595089 initial import
mandel
parents:
diff changeset
326
e78566595089 initial import
mandel
parents:
diff changeset
327 private:
e78566595089 initial import
mandel
parents:
diff changeset
328 QHash<QString, ClassModelItem> _M_classes;
e78566595089 initial import
mandel
parents:
diff changeset
329 QHash<QString, EnumModelItem> _M_enums;
e78566595089 initial import
mandel
parents:
diff changeset
330 QHash<QString, TypeAliasModelItem> _M_typeAliases;
e78566595089 initial import
mandel
parents:
diff changeset
331 QHash<QString, VariableModelItem> _M_variables;
e78566595089 initial import
mandel
parents:
diff changeset
332 QMultiHash<QString, FunctionDefinitionModelItem> _M_functionDefinitions;
e78566595089 initial import
mandel
parents:
diff changeset
333 QMultiHash<QString, FunctionModelItem> _M_functions;
e78566595089 initial import
mandel
parents:
diff changeset
334
e78566595089 initial import
mandel
parents:
diff changeset
335 private:
e78566595089 initial import
mandel
parents:
diff changeset
336 _ScopeModelItem(const _ScopeModelItem &other);
e78566595089 initial import
mandel
parents:
diff changeset
337 void operator = (const _ScopeModelItem &other);
e78566595089 initial import
mandel
parents:
diff changeset
338
e78566595089 initial import
mandel
parents:
diff changeset
339 QStringList _M_enumsDeclarations;
e78566595089 initial import
mandel
parents:
diff changeset
340 };
e78566595089 initial import
mandel
parents:
diff changeset
341
e78566595089 initial import
mandel
parents:
diff changeset
342 class _ClassModelItem: public _ScopeModelItem
e78566595089 initial import
mandel
parents:
diff changeset
343 {
e78566595089 initial import
mandel
parents:
diff changeset
344 public:
e78566595089 initial import
mandel
parents:
diff changeset
345 DECLARE_MODEL_NODE(Class)
e78566595089 initial import
mandel
parents:
diff changeset
346
e78566595089 initial import
mandel
parents:
diff changeset
347 static ClassModelItem create(CodeModel *model);
e78566595089 initial import
mandel
parents:
diff changeset
348
e78566595089 initial import
mandel
parents:
diff changeset
349 public:
e78566595089 initial import
mandel
parents:
diff changeset
350 QStringList baseClasses() const;
e78566595089 initial import
mandel
parents:
diff changeset
351
e78566595089 initial import
mandel
parents:
diff changeset
352 void setBaseClasses(const QStringList &baseClasses);
e78566595089 initial import
mandel
parents:
diff changeset
353 void addBaseClass(const QString &baseClass);
e78566595089 initial import
mandel
parents:
diff changeset
354 void removeBaseClass(const QString &baseClass);
e78566595089 initial import
mandel
parents:
diff changeset
355
e78566595089 initial import
mandel
parents:
diff changeset
356 TemplateParameterList templateParameters() const;
e78566595089 initial import
mandel
parents:
diff changeset
357 void setTemplateParameters(const TemplateParameterList &templateParameters);
e78566595089 initial import
mandel
parents:
diff changeset
358
e78566595089 initial import
mandel
parents:
diff changeset
359 bool extendsClass(const QString &name) const;
e78566595089 initial import
mandel
parents:
diff changeset
360
e78566595089 initial import
mandel
parents:
diff changeset
361 void setClassType(CodeModel::ClassType type);
e78566595089 initial import
mandel
parents:
diff changeset
362 CodeModel::ClassType classType() const;
e78566595089 initial import
mandel
parents:
diff changeset
363
e78566595089 initial import
mandel
parents:
diff changeset
364 void addPropertyDeclaration(const QString &propertyDeclaration);
e78566595089 initial import
mandel
parents:
diff changeset
365 QStringList propertyDeclarations() const { return _M_propertyDeclarations; }
e78566595089 initial import
mandel
parents:
diff changeset
366
e78566595089 initial import
mandel
parents:
diff changeset
367 protected:
e78566595089 initial import
mandel
parents:
diff changeset
368 _ClassModelItem(CodeModel *model, int kind = __node_kind)
e78566595089 initial import
mandel
parents:
diff changeset
369 : _ScopeModelItem(model, kind), _M_classType(CodeModel::Class) {}
e78566595089 initial import
mandel
parents:
diff changeset
370
e78566595089 initial import
mandel
parents:
diff changeset
371 private:
e78566595089 initial import
mandel
parents:
diff changeset
372 QStringList _M_baseClasses;
e78566595089 initial import
mandel
parents:
diff changeset
373 TemplateParameterList _M_templateParameters;
e78566595089 initial import
mandel
parents:
diff changeset
374 CodeModel::ClassType _M_classType;
e78566595089 initial import
mandel
parents:
diff changeset
375
e78566595089 initial import
mandel
parents:
diff changeset
376 QStringList _M_propertyDeclarations;
e78566595089 initial import
mandel
parents:
diff changeset
377
e78566595089 initial import
mandel
parents:
diff changeset
378 private:
e78566595089 initial import
mandel
parents:
diff changeset
379 _ClassModelItem(const _ClassModelItem &other);
e78566595089 initial import
mandel
parents:
diff changeset
380 void operator = (const _ClassModelItem &other);
e78566595089 initial import
mandel
parents:
diff changeset
381 };
e78566595089 initial import
mandel
parents:
diff changeset
382
e78566595089 initial import
mandel
parents:
diff changeset
383 class _NamespaceModelItem: public _ScopeModelItem
e78566595089 initial import
mandel
parents:
diff changeset
384 {
e78566595089 initial import
mandel
parents:
diff changeset
385 public:
e78566595089 initial import
mandel
parents:
diff changeset
386 DECLARE_MODEL_NODE(Namespace)
e78566595089 initial import
mandel
parents:
diff changeset
387
e78566595089 initial import
mandel
parents:
diff changeset
388 static NamespaceModelItem create(CodeModel *model);
e78566595089 initial import
mandel
parents:
diff changeset
389
e78566595089 initial import
mandel
parents:
diff changeset
390 public:
e78566595089 initial import
mandel
parents:
diff changeset
391 NamespaceList namespaces() const;
e78566595089 initial import
mandel
parents:
diff changeset
392
e78566595089 initial import
mandel
parents:
diff changeset
393 void addNamespace(NamespaceModelItem item);
e78566595089 initial import
mandel
parents:
diff changeset
394 void removeNamespace(NamespaceModelItem item);
e78566595089 initial import
mandel
parents:
diff changeset
395
e78566595089 initial import
mandel
parents:
diff changeset
396 NamespaceModelItem findNamespace(const QString &name) const;
e78566595089 initial import
mandel
parents:
diff changeset
397
e78566595089 initial import
mandel
parents:
diff changeset
398 inline QHash<QString, NamespaceModelItem> namespaceMap() const { return _M_namespaces; };
e78566595089 initial import
mandel
parents:
diff changeset
399
e78566595089 initial import
mandel
parents:
diff changeset
400 protected:
e78566595089 initial import
mandel
parents:
diff changeset
401 _NamespaceModelItem(CodeModel *model, int kind = __node_kind)
e78566595089 initial import
mandel
parents:
diff changeset
402 : _ScopeModelItem(model, kind) {}
e78566595089 initial import
mandel
parents:
diff changeset
403
e78566595089 initial import
mandel
parents:
diff changeset
404 private:
e78566595089 initial import
mandel
parents:
diff changeset
405 QHash<QString, NamespaceModelItem> _M_namespaces;
e78566595089 initial import
mandel
parents:
diff changeset
406
e78566595089 initial import
mandel
parents:
diff changeset
407 private:
e78566595089 initial import
mandel
parents:
diff changeset
408 _NamespaceModelItem(const _NamespaceModelItem &other);
e78566595089 initial import
mandel
parents:
diff changeset
409 void operator = (const _NamespaceModelItem &other);
e78566595089 initial import
mandel
parents:
diff changeset
410 };
e78566595089 initial import
mandel
parents:
diff changeset
411
e78566595089 initial import
mandel
parents:
diff changeset
412 class _FileModelItem: public _NamespaceModelItem
e78566595089 initial import
mandel
parents:
diff changeset
413 {
e78566595089 initial import
mandel
parents:
diff changeset
414 public:
e78566595089 initial import
mandel
parents:
diff changeset
415 DECLARE_MODEL_NODE(File)
e78566595089 initial import
mandel
parents:
diff changeset
416
e78566595089 initial import
mandel
parents:
diff changeset
417 static FileModelItem create(CodeModel *model);
e78566595089 initial import
mandel
parents:
diff changeset
418
e78566595089 initial import
mandel
parents:
diff changeset
419 protected:
e78566595089 initial import
mandel
parents:
diff changeset
420 _FileModelItem(CodeModel *model, int kind = __node_kind)
e78566595089 initial import
mandel
parents:
diff changeset
421 : _NamespaceModelItem(model, kind) {}
e78566595089 initial import
mandel
parents:
diff changeset
422
e78566595089 initial import
mandel
parents:
diff changeset
423 private:
e78566595089 initial import
mandel
parents:
diff changeset
424 _FileModelItem(const _FileModelItem &other);
e78566595089 initial import
mandel
parents:
diff changeset
425 void operator = (const _FileModelItem &other);
e78566595089 initial import
mandel
parents:
diff changeset
426 };
e78566595089 initial import
mandel
parents:
diff changeset
427
e78566595089 initial import
mandel
parents:
diff changeset
428 class _ArgumentModelItem: public _CodeModelItem
e78566595089 initial import
mandel
parents:
diff changeset
429 {
e78566595089 initial import
mandel
parents:
diff changeset
430 public:
e78566595089 initial import
mandel
parents:
diff changeset
431 DECLARE_MODEL_NODE(Argument)
e78566595089 initial import
mandel
parents:
diff changeset
432
e78566595089 initial import
mandel
parents:
diff changeset
433 static ArgumentModelItem create(CodeModel *model);
e78566595089 initial import
mandel
parents:
diff changeset
434
e78566595089 initial import
mandel
parents:
diff changeset
435 public:
e78566595089 initial import
mandel
parents:
diff changeset
436 TypeInfo type() const;
e78566595089 initial import
mandel
parents:
diff changeset
437 void setType(const TypeInfo &type);
e78566595089 initial import
mandel
parents:
diff changeset
438
e78566595089 initial import
mandel
parents:
diff changeset
439 bool defaultValue() const;
e78566595089 initial import
mandel
parents:
diff changeset
440 void setDefaultValue(bool defaultValue);
e78566595089 initial import
mandel
parents:
diff changeset
441
e78566595089 initial import
mandel
parents:
diff changeset
442 QString defaultValueExpression() const { return _M_defaultValueExpression; }
e78566595089 initial import
mandel
parents:
diff changeset
443 void setDefaultValueExpression(const QString &expr) { _M_defaultValueExpression = expr; }
e78566595089 initial import
mandel
parents:
diff changeset
444
e78566595089 initial import
mandel
parents:
diff changeset
445 protected:
e78566595089 initial import
mandel
parents:
diff changeset
446 _ArgumentModelItem(CodeModel *model, int kind = __node_kind)
e78566595089 initial import
mandel
parents:
diff changeset
447 : _CodeModelItem(model, kind), _M_defaultValue(false) {}
e78566595089 initial import
mandel
parents:
diff changeset
448
e78566595089 initial import
mandel
parents:
diff changeset
449 private:
e78566595089 initial import
mandel
parents:
diff changeset
450 TypeInfo _M_type;
e78566595089 initial import
mandel
parents:
diff changeset
451 QString _M_defaultValueExpression;
e78566595089 initial import
mandel
parents:
diff changeset
452 bool _M_defaultValue;
e78566595089 initial import
mandel
parents:
diff changeset
453
e78566595089 initial import
mandel
parents:
diff changeset
454 private:
e78566595089 initial import
mandel
parents:
diff changeset
455 _ArgumentModelItem(const _ArgumentModelItem &other);
e78566595089 initial import
mandel
parents:
diff changeset
456 void operator = (const _ArgumentModelItem &other);
e78566595089 initial import
mandel
parents:
diff changeset
457 };
e78566595089 initial import
mandel
parents:
diff changeset
458
e78566595089 initial import
mandel
parents:
diff changeset
459 class _MemberModelItem: public _CodeModelItem
e78566595089 initial import
mandel
parents:
diff changeset
460 {
e78566595089 initial import
mandel
parents:
diff changeset
461 public:
e78566595089 initial import
mandel
parents:
diff changeset
462 DECLARE_MODEL_NODE(Member)
e78566595089 initial import
mandel
parents:
diff changeset
463
e78566595089 initial import
mandel
parents:
diff changeset
464 bool isConstant() const;
e78566595089 initial import
mandel
parents:
diff changeset
465 void setConstant(bool isConstant);
e78566595089 initial import
mandel
parents:
diff changeset
466
e78566595089 initial import
mandel
parents:
diff changeset
467 bool isVolatile() const;
e78566595089 initial import
mandel
parents:
diff changeset
468 void setVolatile(bool isVolatile);
e78566595089 initial import
mandel
parents:
diff changeset
469
e78566595089 initial import
mandel
parents:
diff changeset
470 bool isStatic() const;
e78566595089 initial import
mandel
parents:
diff changeset
471 void setStatic(bool isStatic);
e78566595089 initial import
mandel
parents:
diff changeset
472
e78566595089 initial import
mandel
parents:
diff changeset
473 bool isAuto() const;
e78566595089 initial import
mandel
parents:
diff changeset
474 void setAuto(bool isAuto);
e78566595089 initial import
mandel
parents:
diff changeset
475
e78566595089 initial import
mandel
parents:
diff changeset
476 bool isFriend() const;
e78566595089 initial import
mandel
parents:
diff changeset
477 void setFriend(bool isFriend);
e78566595089 initial import
mandel
parents:
diff changeset
478
e78566595089 initial import
mandel
parents:
diff changeset
479 bool isRegister() const;
e78566595089 initial import
mandel
parents:
diff changeset
480 void setRegister(bool isRegister);
e78566595089 initial import
mandel
parents:
diff changeset
481
e78566595089 initial import
mandel
parents:
diff changeset
482 bool isExtern() const;
e78566595089 initial import
mandel
parents:
diff changeset
483 void setExtern(bool isExtern);
e78566595089 initial import
mandel
parents:
diff changeset
484
e78566595089 initial import
mandel
parents:
diff changeset
485 bool isMutable() const;
e78566595089 initial import
mandel
parents:
diff changeset
486 void setMutable(bool isMutable);
e78566595089 initial import
mandel
parents:
diff changeset
487
e78566595089 initial import
mandel
parents:
diff changeset
488 CodeModel::AccessPolicy accessPolicy() const;
e78566595089 initial import
mandel
parents:
diff changeset
489 void setAccessPolicy(CodeModel::AccessPolicy accessPolicy);
e78566595089 initial import
mandel
parents:
diff changeset
490
e78566595089 initial import
mandel
parents:
diff changeset
491 TemplateParameterList templateParameters() const
e78566595089 initial import
mandel
parents:
diff changeset
492 { return _M_templateParameters; }
e78566595089 initial import
mandel
parents:
diff changeset
493
e78566595089 initial import
mandel
parents:
diff changeset
494 void setTemplateParameters(const TemplateParameterList &templateParameters)
e78566595089 initial import
mandel
parents:
diff changeset
495 { _M_templateParameters = templateParameters; }
e78566595089 initial import
mandel
parents:
diff changeset
496
e78566595089 initial import
mandel
parents:
diff changeset
497 TypeInfo type() const;
e78566595089 initial import
mandel
parents:
diff changeset
498 void setType(const TypeInfo &type);
e78566595089 initial import
mandel
parents:
diff changeset
499
e78566595089 initial import
mandel
parents:
diff changeset
500 protected:
e78566595089 initial import
mandel
parents:
diff changeset
501 _MemberModelItem(CodeModel *model, int kind)
e78566595089 initial import
mandel
parents:
diff changeset
502 : _CodeModelItem(model, kind),
e78566595089 initial import
mandel
parents:
diff changeset
503 _M_accessPolicy(CodeModel::Public),
e78566595089 initial import
mandel
parents:
diff changeset
504 _M_flags(0)
e78566595089 initial import
mandel
parents:
diff changeset
505 {}
e78566595089 initial import
mandel
parents:
diff changeset
506
e78566595089 initial import
mandel
parents:
diff changeset
507 private:
e78566595089 initial import
mandel
parents:
diff changeset
508 TemplateParameterList _M_templateParameters;
e78566595089 initial import
mandel
parents:
diff changeset
509 TypeInfo _M_type;
e78566595089 initial import
mandel
parents:
diff changeset
510 CodeModel::AccessPolicy _M_accessPolicy;
e78566595089 initial import
mandel
parents:
diff changeset
511 union
e78566595089 initial import
mandel
parents:
diff changeset
512 {
e78566595089 initial import
mandel
parents:
diff changeset
513 struct
e78566595089 initial import
mandel
parents:
diff changeset
514 {
e78566595089 initial import
mandel
parents:
diff changeset
515 uint _M_isConstant: 1;
e78566595089 initial import
mandel
parents:
diff changeset
516 uint _M_isVolatile: 1;
e78566595089 initial import
mandel
parents:
diff changeset
517 uint _M_isStatic: 1;
e78566595089 initial import
mandel
parents:
diff changeset
518 uint _M_isAuto: 1;
e78566595089 initial import
mandel
parents:
diff changeset
519 uint _M_isFriend: 1;
e78566595089 initial import
mandel
parents:
diff changeset
520 uint _M_isRegister: 1;
e78566595089 initial import
mandel
parents:
diff changeset
521 uint _M_isExtern: 1;
e78566595089 initial import
mandel
parents:
diff changeset
522 uint _M_isMutable: 1;
e78566595089 initial import
mandel
parents:
diff changeset
523 };
e78566595089 initial import
mandel
parents:
diff changeset
524 uint _M_flags;
e78566595089 initial import
mandel
parents:
diff changeset
525 };
e78566595089 initial import
mandel
parents:
diff changeset
526
e78566595089 initial import
mandel
parents:
diff changeset
527 };
e78566595089 initial import
mandel
parents:
diff changeset
528
e78566595089 initial import
mandel
parents:
diff changeset
529 class _FunctionModelItem: public _MemberModelItem
e78566595089 initial import
mandel
parents:
diff changeset
530 {
e78566595089 initial import
mandel
parents:
diff changeset
531 public:
e78566595089 initial import
mandel
parents:
diff changeset
532 DECLARE_MODEL_NODE(Function)
e78566595089 initial import
mandel
parents:
diff changeset
533
e78566595089 initial import
mandel
parents:
diff changeset
534 static FunctionModelItem create(CodeModel *model);
e78566595089 initial import
mandel
parents:
diff changeset
535
e78566595089 initial import
mandel
parents:
diff changeset
536 public:
e78566595089 initial import
mandel
parents:
diff changeset
537 ArgumentList arguments() const;
e78566595089 initial import
mandel
parents:
diff changeset
538
e78566595089 initial import
mandel
parents:
diff changeset
539 void addArgument(ArgumentModelItem item);
e78566595089 initial import
mandel
parents:
diff changeset
540 void removeArgument(ArgumentModelItem item);
e78566595089 initial import
mandel
parents:
diff changeset
541
e78566595089 initial import
mandel
parents:
diff changeset
542 CodeModel::FunctionType functionType() const;
e78566595089 initial import
mandel
parents:
diff changeset
543 void setFunctionType(CodeModel::FunctionType functionType);
e78566595089 initial import
mandel
parents:
diff changeset
544
e78566595089 initial import
mandel
parents:
diff changeset
545 bool isVirtual() const;
e78566595089 initial import
mandel
parents:
diff changeset
546 void setVirtual(bool isVirtual);
e78566595089 initial import
mandel
parents:
diff changeset
547
e78566595089 initial import
mandel
parents:
diff changeset
548 bool isInline() const;
e78566595089 initial import
mandel
parents:
diff changeset
549 void setInline(bool isInline);
e78566595089 initial import
mandel
parents:
diff changeset
550
e78566595089 initial import
mandel
parents:
diff changeset
551 bool isExplicit() const;
e78566595089 initial import
mandel
parents:
diff changeset
552 void setExplicit(bool isExplicit);
e78566595089 initial import
mandel
parents:
diff changeset
553
e78566595089 initial import
mandel
parents:
diff changeset
554 bool isInvokable() const; // Qt
e78566595089 initial import
mandel
parents:
diff changeset
555 void setInvokable(bool isInvokable); // Qt
e78566595089 initial import
mandel
parents:
diff changeset
556
e78566595089 initial import
mandel
parents:
diff changeset
557 bool isAbstract() const;
e78566595089 initial import
mandel
parents:
diff changeset
558 void setAbstract(bool isAbstract);
e78566595089 initial import
mandel
parents:
diff changeset
559
e78566595089 initial import
mandel
parents:
diff changeset
560 bool isVariadics() const;
e78566595089 initial import
mandel
parents:
diff changeset
561 void setVariadics(bool isVariadics);
e78566595089 initial import
mandel
parents:
diff changeset
562
e78566595089 initial import
mandel
parents:
diff changeset
563 bool isSimilar(FunctionModelItem other) const;
e78566595089 initial import
mandel
parents:
diff changeset
564
e78566595089 initial import
mandel
parents:
diff changeset
565 protected:
e78566595089 initial import
mandel
parents:
diff changeset
566 _FunctionModelItem(CodeModel *model, int kind = __node_kind)
e78566595089 initial import
mandel
parents:
diff changeset
567 : _MemberModelItem(model, kind),
e78566595089 initial import
mandel
parents:
diff changeset
568 _M_functionType(CodeModel::Normal),
e78566595089 initial import
mandel
parents:
diff changeset
569 _M_flags(0)
e78566595089 initial import
mandel
parents:
diff changeset
570 {}
e78566595089 initial import
mandel
parents:
diff changeset
571
e78566595089 initial import
mandel
parents:
diff changeset
572 private:
e78566595089 initial import
mandel
parents:
diff changeset
573 ArgumentList _M_arguments;
e78566595089 initial import
mandel
parents:
diff changeset
574 CodeModel::FunctionType _M_functionType;
e78566595089 initial import
mandel
parents:
diff changeset
575 union
e78566595089 initial import
mandel
parents:
diff changeset
576 {
e78566595089 initial import
mandel
parents:
diff changeset
577 struct
e78566595089 initial import
mandel
parents:
diff changeset
578 {
e78566595089 initial import
mandel
parents:
diff changeset
579 uint _M_isVirtual: 1;
e78566595089 initial import
mandel
parents:
diff changeset
580 uint _M_isInline: 1;
e78566595089 initial import
mandel
parents:
diff changeset
581 uint _M_isAbstract: 1;
e78566595089 initial import
mandel
parents:
diff changeset
582 uint _M_isExplicit: 1;
e78566595089 initial import
mandel
parents:
diff changeset
583 uint _M_isVariadics: 1;
e78566595089 initial import
mandel
parents:
diff changeset
584 uint _M_isInvokable : 1; // Qt
e78566595089 initial import
mandel
parents:
diff changeset
585 };
e78566595089 initial import
mandel
parents:
diff changeset
586 uint _M_flags;
e78566595089 initial import
mandel
parents:
diff changeset
587 };
e78566595089 initial import
mandel
parents:
diff changeset
588
e78566595089 initial import
mandel
parents:
diff changeset
589 private:
e78566595089 initial import
mandel
parents:
diff changeset
590 _FunctionModelItem(const _FunctionModelItem &other);
e78566595089 initial import
mandel
parents:
diff changeset
591 void operator = (const _FunctionModelItem &other);
e78566595089 initial import
mandel
parents:
diff changeset
592 };
e78566595089 initial import
mandel
parents:
diff changeset
593
e78566595089 initial import
mandel
parents:
diff changeset
594 class _FunctionDefinitionModelItem: public _FunctionModelItem
e78566595089 initial import
mandel
parents:
diff changeset
595 {
e78566595089 initial import
mandel
parents:
diff changeset
596 public:
e78566595089 initial import
mandel
parents:
diff changeset
597 DECLARE_MODEL_NODE(FunctionDefinition)
e78566595089 initial import
mandel
parents:
diff changeset
598
e78566595089 initial import
mandel
parents:
diff changeset
599 static FunctionDefinitionModelItem create(CodeModel *model);
e78566595089 initial import
mandel
parents:
diff changeset
600
e78566595089 initial import
mandel
parents:
diff changeset
601 protected:
e78566595089 initial import
mandel
parents:
diff changeset
602 _FunctionDefinitionModelItem(CodeModel *model, int kind = __node_kind)
e78566595089 initial import
mandel
parents:
diff changeset
603 : _FunctionModelItem(model, kind) {}
e78566595089 initial import
mandel
parents:
diff changeset
604
e78566595089 initial import
mandel
parents:
diff changeset
605 private:
e78566595089 initial import
mandel
parents:
diff changeset
606 _FunctionDefinitionModelItem(const _FunctionDefinitionModelItem &other);
e78566595089 initial import
mandel
parents:
diff changeset
607 void operator = (const _FunctionDefinitionModelItem &other);
e78566595089 initial import
mandel
parents:
diff changeset
608 };
e78566595089 initial import
mandel
parents:
diff changeset
609
e78566595089 initial import
mandel
parents:
diff changeset
610 class _VariableModelItem: public _MemberModelItem
e78566595089 initial import
mandel
parents:
diff changeset
611 {
e78566595089 initial import
mandel
parents:
diff changeset
612 public:
e78566595089 initial import
mandel
parents:
diff changeset
613 DECLARE_MODEL_NODE(Variable)
e78566595089 initial import
mandel
parents:
diff changeset
614
e78566595089 initial import
mandel
parents:
diff changeset
615 static VariableModelItem create(CodeModel *model);
e78566595089 initial import
mandel
parents:
diff changeset
616
e78566595089 initial import
mandel
parents:
diff changeset
617 protected:
e78566595089 initial import
mandel
parents:
diff changeset
618 _VariableModelItem(CodeModel *model, int kind = __node_kind)
e78566595089 initial import
mandel
parents:
diff changeset
619 : _MemberModelItem(model, kind)
e78566595089 initial import
mandel
parents:
diff changeset
620 {}
e78566595089 initial import
mandel
parents:
diff changeset
621
e78566595089 initial import
mandel
parents:
diff changeset
622 private:
e78566595089 initial import
mandel
parents:
diff changeset
623 _VariableModelItem(const _VariableModelItem &other);
e78566595089 initial import
mandel
parents:
diff changeset
624 void operator = (const _VariableModelItem &other);
e78566595089 initial import
mandel
parents:
diff changeset
625 };
e78566595089 initial import
mandel
parents:
diff changeset
626
e78566595089 initial import
mandel
parents:
diff changeset
627 class _TypeAliasModelItem: public _CodeModelItem
e78566595089 initial import
mandel
parents:
diff changeset
628 {
e78566595089 initial import
mandel
parents:
diff changeset
629 public:
e78566595089 initial import
mandel
parents:
diff changeset
630 DECLARE_MODEL_NODE(TypeAlias)
e78566595089 initial import
mandel
parents:
diff changeset
631
e78566595089 initial import
mandel
parents:
diff changeset
632 static TypeAliasModelItem create(CodeModel *model);
e78566595089 initial import
mandel
parents:
diff changeset
633
e78566595089 initial import
mandel
parents:
diff changeset
634 public:
e78566595089 initial import
mandel
parents:
diff changeset
635 TypeInfo type() const;
e78566595089 initial import
mandel
parents:
diff changeset
636 void setType(const TypeInfo &type);
e78566595089 initial import
mandel
parents:
diff changeset
637
e78566595089 initial import
mandel
parents:
diff changeset
638 protected:
e78566595089 initial import
mandel
parents:
diff changeset
639 _TypeAliasModelItem(CodeModel *model, int kind = __node_kind)
e78566595089 initial import
mandel
parents:
diff changeset
640 : _CodeModelItem(model, kind) {}
e78566595089 initial import
mandel
parents:
diff changeset
641
e78566595089 initial import
mandel
parents:
diff changeset
642 private:
e78566595089 initial import
mandel
parents:
diff changeset
643 TypeInfo _M_type;
e78566595089 initial import
mandel
parents:
diff changeset
644
e78566595089 initial import
mandel
parents:
diff changeset
645 private:
e78566595089 initial import
mandel
parents:
diff changeset
646 _TypeAliasModelItem(const _TypeAliasModelItem &other);
e78566595089 initial import
mandel
parents:
diff changeset
647 void operator = (const _TypeAliasModelItem &other);
e78566595089 initial import
mandel
parents:
diff changeset
648 };
e78566595089 initial import
mandel
parents:
diff changeset
649
e78566595089 initial import
mandel
parents:
diff changeset
650 class _EnumModelItem: public _CodeModelItem
e78566595089 initial import
mandel
parents:
diff changeset
651 {
e78566595089 initial import
mandel
parents:
diff changeset
652 public:
e78566595089 initial import
mandel
parents:
diff changeset
653 DECLARE_MODEL_NODE(Enum)
e78566595089 initial import
mandel
parents:
diff changeset
654
e78566595089 initial import
mandel
parents:
diff changeset
655 static EnumModelItem create(CodeModel *model);
e78566595089 initial import
mandel
parents:
diff changeset
656
e78566595089 initial import
mandel
parents:
diff changeset
657 public:
e78566595089 initial import
mandel
parents:
diff changeset
658 CodeModel::AccessPolicy accessPolicy() const;
e78566595089 initial import
mandel
parents:
diff changeset
659 void setAccessPolicy(CodeModel::AccessPolicy accessPolicy);
e78566595089 initial import
mandel
parents:
diff changeset
660
e78566595089 initial import
mandel
parents:
diff changeset
661 EnumeratorList enumerators() const;
e78566595089 initial import
mandel
parents:
diff changeset
662 void addEnumerator(EnumeratorModelItem item);
e78566595089 initial import
mandel
parents:
diff changeset
663 void removeEnumerator(EnumeratorModelItem item);
e78566595089 initial import
mandel
parents:
diff changeset
664
e78566595089 initial import
mandel
parents:
diff changeset
665 protected:
e78566595089 initial import
mandel
parents:
diff changeset
666 _EnumModelItem(CodeModel *model, int kind = __node_kind)
e78566595089 initial import
mandel
parents:
diff changeset
667 : _CodeModelItem(model, kind),
e78566595089 initial import
mandel
parents:
diff changeset
668 _M_accessPolicy(CodeModel::Public)
e78566595089 initial import
mandel
parents:
diff changeset
669 {}
e78566595089 initial import
mandel
parents:
diff changeset
670
e78566595089 initial import
mandel
parents:
diff changeset
671 private:
e78566595089 initial import
mandel
parents:
diff changeset
672 CodeModel::AccessPolicy _M_accessPolicy;
e78566595089 initial import
mandel
parents:
diff changeset
673 EnumeratorList _M_enumerators;
e78566595089 initial import
mandel
parents:
diff changeset
674
e78566595089 initial import
mandel
parents:
diff changeset
675 private:
e78566595089 initial import
mandel
parents:
diff changeset
676 _EnumModelItem(const _EnumModelItem &other);
e78566595089 initial import
mandel
parents:
diff changeset
677 void operator = (const _EnumModelItem &other);
e78566595089 initial import
mandel
parents:
diff changeset
678 };
e78566595089 initial import
mandel
parents:
diff changeset
679
e78566595089 initial import
mandel
parents:
diff changeset
680 class _EnumeratorModelItem: public _CodeModelItem
e78566595089 initial import
mandel
parents:
diff changeset
681 {
e78566595089 initial import
mandel
parents:
diff changeset
682 public:
e78566595089 initial import
mandel
parents:
diff changeset
683 DECLARE_MODEL_NODE(Enumerator)
e78566595089 initial import
mandel
parents:
diff changeset
684
e78566595089 initial import
mandel
parents:
diff changeset
685 static EnumeratorModelItem create(CodeModel *model);
e78566595089 initial import
mandel
parents:
diff changeset
686
e78566595089 initial import
mandel
parents:
diff changeset
687 public:
e78566595089 initial import
mandel
parents:
diff changeset
688 QString value() const;
e78566595089 initial import
mandel
parents:
diff changeset
689 void setValue(const QString &value);
e78566595089 initial import
mandel
parents:
diff changeset
690
e78566595089 initial import
mandel
parents:
diff changeset
691 protected:
e78566595089 initial import
mandel
parents:
diff changeset
692 _EnumeratorModelItem(CodeModel *model, int kind = __node_kind)
e78566595089 initial import
mandel
parents:
diff changeset
693 : _CodeModelItem(model, kind) {}
e78566595089 initial import
mandel
parents:
diff changeset
694
e78566595089 initial import
mandel
parents:
diff changeset
695 private:
e78566595089 initial import
mandel
parents:
diff changeset
696 QString _M_value;
e78566595089 initial import
mandel
parents:
diff changeset
697
e78566595089 initial import
mandel
parents:
diff changeset
698 private:
e78566595089 initial import
mandel
parents:
diff changeset
699 _EnumeratorModelItem(const _EnumeratorModelItem &other);
e78566595089 initial import
mandel
parents:
diff changeset
700 void operator = (const _EnumeratorModelItem &other);
e78566595089 initial import
mandel
parents:
diff changeset
701 };
e78566595089 initial import
mandel
parents:
diff changeset
702
e78566595089 initial import
mandel
parents:
diff changeset
703 class _TemplateParameterModelItem: public _CodeModelItem
e78566595089 initial import
mandel
parents:
diff changeset
704 {
e78566595089 initial import
mandel
parents:
diff changeset
705 public:
e78566595089 initial import
mandel
parents:
diff changeset
706 DECLARE_MODEL_NODE(TemplateParameter)
e78566595089 initial import
mandel
parents:
diff changeset
707
e78566595089 initial import
mandel
parents:
diff changeset
708 static TemplateParameterModelItem create(CodeModel *model);
e78566595089 initial import
mandel
parents:
diff changeset
709
e78566595089 initial import
mandel
parents:
diff changeset
710 public:
e78566595089 initial import
mandel
parents:
diff changeset
711 TypeInfo type() const;
e78566595089 initial import
mandel
parents:
diff changeset
712 void setType(const TypeInfo &type);
e78566595089 initial import
mandel
parents:
diff changeset
713
e78566595089 initial import
mandel
parents:
diff changeset
714 bool defaultValue() const;
e78566595089 initial import
mandel
parents:
diff changeset
715 void setDefaultValue(bool defaultValue);
e78566595089 initial import
mandel
parents:
diff changeset
716
e78566595089 initial import
mandel
parents:
diff changeset
717 protected:
e78566595089 initial import
mandel
parents:
diff changeset
718 _TemplateParameterModelItem(CodeModel *model, int kind = __node_kind)
e78566595089 initial import
mandel
parents:
diff changeset
719 : _CodeModelItem(model, kind), _M_defaultValue(false) {}
e78566595089 initial import
mandel
parents:
diff changeset
720
e78566595089 initial import
mandel
parents:
diff changeset
721 private:
e78566595089 initial import
mandel
parents:
diff changeset
722 TypeInfo _M_type;
e78566595089 initial import
mandel
parents:
diff changeset
723 bool _M_defaultValue;
e78566595089 initial import
mandel
parents:
diff changeset
724
e78566595089 initial import
mandel
parents:
diff changeset
725 private:
e78566595089 initial import
mandel
parents:
diff changeset
726 _TemplateParameterModelItem(const _TemplateParameterModelItem &other);
e78566595089 initial import
mandel
parents:
diff changeset
727 void operator = (const _TemplateParameterModelItem &other);
e78566595089 initial import
mandel
parents:
diff changeset
728 };
e78566595089 initial import
mandel
parents:
diff changeset
729
e78566595089 initial import
mandel
parents:
diff changeset
730 template <class _Target, class _Source>
e78566595089 initial import
mandel
parents:
diff changeset
731 _Target model_safe_cast(_Source item)
e78566595089 initial import
mandel
parents:
diff changeset
732 {
e78566595089 initial import
mandel
parents:
diff changeset
733 typedef typename _Target::Type * _Target_pointer;
e78566595089 initial import
mandel
parents:
diff changeset
734 typedef typename _Source::Type * _Source_pointer;
e78566595089 initial import
mandel
parents:
diff changeset
735
e78566595089 initial import
mandel
parents:
diff changeset
736 _Source_pointer source = item.data();
e78566595089 initial import
mandel
parents:
diff changeset
737 if (source && source->kind() == _Target_pointer(0)->__node_kind)
e78566595089 initial import
mandel
parents:
diff changeset
738 {
e78566595089 initial import
mandel
parents:
diff changeset
739 _Target ptr(static_cast<_Target_pointer>(source));
e78566595089 initial import
mandel
parents:
diff changeset
740 return ptr;
e78566595089 initial import
mandel
parents:
diff changeset
741 }
e78566595089 initial import
mandel
parents:
diff changeset
742
e78566595089 initial import
mandel
parents:
diff changeset
743 return _Target();
e78566595089 initial import
mandel
parents:
diff changeset
744 }
e78566595089 initial import
mandel
parents:
diff changeset
745
e78566595089 initial import
mandel
parents:
diff changeset
746 template <typename _Target, typename _Source>
e78566595089 initial import
mandel
parents:
diff changeset
747 _Target model_dynamic_cast(_Source item)
e78566595089 initial import
mandel
parents:
diff changeset
748 {
e78566595089 initial import
mandel
parents:
diff changeset
749 typedef typename _Target::Type * _Target_pointer;
e78566595089 initial import
mandel
parents:
diff changeset
750 typedef typename _Source::Type * _Source_pointer;
e78566595089 initial import
mandel
parents:
diff changeset
751
e78566595089 initial import
mandel
parents:
diff changeset
752 _Source_pointer source = item.data();
e78566595089 initial import
mandel
parents:
diff changeset
753 if (source && (source->kind() == _Target_pointer(0)->__node_kind
e78566595089 initial import
mandel
parents:
diff changeset
754 || (int(_Target_pointer(0)->__node_kind) <= int(_CodeModelItem::KindMask)
e78566595089 initial import
mandel
parents:
diff changeset
755 && ((source->kind() & _Target_pointer(0)->__node_kind)
e78566595089 initial import
mandel
parents:
diff changeset
756 == _Target_pointer(0)->__node_kind))))
e78566595089 initial import
mandel
parents:
diff changeset
757 {
e78566595089 initial import
mandel
parents:
diff changeset
758 _Target ptr(static_cast<_Target_pointer>(source));
e78566595089 initial import
mandel
parents:
diff changeset
759 return ptr;
e78566595089 initial import
mandel
parents:
diff changeset
760 }
e78566595089 initial import
mandel
parents:
diff changeset
761
e78566595089 initial import
mandel
parents:
diff changeset
762 return _Target();
e78566595089 initial import
mandel
parents:
diff changeset
763 }
e78566595089 initial import
mandel
parents:
diff changeset
764 #endif // CODEMODEL_H
e78566595089 initial import
mandel
parents:
diff changeset
765
e78566595089 initial import
mandel
parents:
diff changeset
766 // kate: space-indent on; indent-width 2; replace-tabs on;