annotate generator/parser/codemodel.h @ 414:b2a803c73b89 default tip

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