1254721Semaste//===-- SBType.h ------------------------------------------------*- C++ -*-===//
2254721Semaste//
3254721Semaste//                     The LLVM Compiler Infrastructure
4254721Semaste//
5254721Semaste// This file is distributed under the University of Illinois Open Source
6254721Semaste// License. See LICENSE.TXT for details.
7254721Semaste//
8254721Semaste//===----------------------------------------------------------------------===//
9254721Semaste
10254721Semaste#ifndef LLDB_SBType_h_
11254721Semaste#define LLDB_SBType_h_
12254721Semaste
13254721Semaste#include "lldb/API/SBDefines.h"
14254721Semaste
15254721Semastenamespace lldb {
16254721Semaste
17254721Semasteclass SBTypeList;
18254721Semaste
19288943Sdimclass LLDB_API SBTypeMember
20254721Semaste{
21254721Semastepublic:
22254721Semaste    SBTypeMember ();
23254721Semaste
24254721Semaste    SBTypeMember (const lldb::SBTypeMember& rhs);
25254721Semaste
26254721Semaste    ~SBTypeMember();
27254721Semaste
28254721Semaste    lldb::SBTypeMember&
29254721Semaste    operator = (const lldb::SBTypeMember& rhs);
30254721Semaste
31254721Semaste    bool
32254721Semaste    IsValid() const;
33254721Semaste
34254721Semaste    const char *
35254721Semaste    GetName ();
36254721Semaste
37254721Semaste    lldb::SBType
38254721Semaste    GetType ();
39254721Semaste
40254721Semaste    uint64_t
41254721Semaste    GetOffsetInBytes();
42254721Semaste
43254721Semaste    uint64_t
44254721Semaste    GetOffsetInBits();
45254721Semaste
46254721Semaste    bool
47254721Semaste    IsBitfield();
48254721Semaste
49254721Semaste    uint32_t
50254721Semaste    GetBitfieldSizeInBits();
51254721Semaste
52254721Semaste    bool
53254721Semaste    GetDescription (lldb::SBStream &description,
54254721Semaste                    lldb::DescriptionLevel description_level);
55254721Semaste
56254721Semasteprotected:
57254721Semaste    friend class SBType;
58254721Semaste
59254721Semaste    void
60254721Semaste    reset (lldb_private::TypeMemberImpl *);
61254721Semaste
62254721Semaste    lldb_private::TypeMemberImpl &
63254721Semaste    ref ();
64254721Semaste
65254721Semaste    const lldb_private::TypeMemberImpl &
66254721Semaste    ref () const;
67254721Semaste
68254721Semaste    std::unique_ptr<lldb_private::TypeMemberImpl> m_opaque_ap;
69254721Semaste};
70280031Sdim
71280031Sdimclass SBTypeMemberFunction
72280031Sdim{
73280031Sdimpublic:
74280031Sdim    SBTypeMemberFunction ();
75280031Sdim
76280031Sdim    SBTypeMemberFunction (const lldb::SBTypeMemberFunction& rhs);
77280031Sdim
78280031Sdim    ~SBTypeMemberFunction();
79280031Sdim
80280031Sdim    lldb::SBTypeMemberFunction&
81280031Sdim    operator = (const lldb::SBTypeMemberFunction& rhs);
82280031Sdim
83280031Sdim    bool
84280031Sdim    IsValid() const;
85280031Sdim
86280031Sdim    const char *
87280031Sdim    GetName ();
88296417Sdim
89296417Sdim    const char *
90296417Sdim    GetDemangledName ();
91296417Sdim
92296417Sdim    const char *
93296417Sdim    GetMangledName ();
94296417Sdim
95280031Sdim    lldb::SBType
96280031Sdim    GetType ();
97280031Sdim
98280031Sdim    lldb::SBType
99280031Sdim    GetReturnType ();
100280031Sdim
101280031Sdim    uint32_t
102280031Sdim    GetNumberOfArguments ();
103280031Sdim
104280031Sdim    lldb::SBType
105280031Sdim    GetArgumentTypeAtIndex (uint32_t);
106280031Sdim
107280031Sdim    lldb::MemberFunctionKind
108280031Sdim    GetKind();
109280031Sdim
110280031Sdim    bool
111280031Sdim    GetDescription (lldb::SBStream &description,
112280031Sdim                    lldb::DescriptionLevel description_level);
113280031Sdim
114280031Sdimprotected:
115280031Sdim    friend class SBType;
116280031Sdim
117280031Sdim    void
118280031Sdim    reset (lldb_private::TypeMemberFunctionImpl *);
119280031Sdim
120280031Sdim    lldb_private::TypeMemberFunctionImpl &
121280031Sdim    ref ();
122280031Sdim
123280031Sdim    const lldb_private::TypeMemberFunctionImpl &
124280031Sdim    ref () const;
125280031Sdim
126280031Sdim    lldb::TypeMemberFunctionImplSP m_opaque_sp;
127280031Sdim};
128254721Semaste
129280031Sdim
130254721Semasteclass SBType
131254721Semaste{
132254721Semastepublic:
133254721Semaste
134254721Semaste    SBType();
135254721Semaste
136254721Semaste    SBType (const lldb::SBType &rhs);
137254721Semaste
138254721Semaste    ~SBType ();
139254721Semaste
140254721Semaste    bool
141254721Semaste    IsValid() const;
142254721Semaste
143254721Semaste    uint64_t
144254721Semaste    GetByteSize();
145254721Semaste
146254721Semaste    bool
147254721Semaste    IsPointerType();
148254721Semaste
149254721Semaste    bool
150254721Semaste    IsReferenceType();
151254721Semaste
152254721Semaste    bool
153254721Semaste    IsFunctionType ();
154254721Semaste
155254721Semaste    bool
156254721Semaste    IsPolymorphicClass ();
157254721Semaste
158280031Sdim    bool
159280031Sdim    IsArrayType ();
160280031Sdim
161280031Sdim    bool
162288943Sdim    IsVectorType ();
163288943Sdim
164288943Sdim    bool
165280031Sdim    IsTypedefType ();
166280031Sdim
167296417Sdim    bool
168296417Sdim    IsAnonymousType ();
169296417Sdim
170254721Semaste    lldb::SBType
171254721Semaste    GetPointerType();
172254721Semaste
173254721Semaste    lldb::SBType
174254721Semaste    GetPointeeType();
175254721Semaste
176254721Semaste    lldb::SBType
177254721Semaste    GetReferenceType();
178254721Semaste
179254721Semaste    lldb::SBType
180262528Semaste    GetTypedefedType();
181262528Semaste
182262528Semaste    lldb::SBType
183254721Semaste    GetDereferencedType();
184254721Semaste
185254721Semaste    lldb::SBType
186254721Semaste    GetUnqualifiedType();
187280031Sdim
188280031Sdim    lldb::SBType
189280031Sdim    GetArrayElementType ();
190288943Sdim
191288943Sdim    lldb::SBType
192288943Sdim    GetVectorElementType ();
193254721Semaste
194254721Semaste    lldb::SBType
195254721Semaste    GetCanonicalType();
196254721Semaste    // Get the "lldb::BasicType" enumeration for a type. If a type is not a basic
197254721Semaste    // type eBasicTypeInvalid will be returned
198254721Semaste    lldb::BasicType
199254721Semaste    GetBasicType();
200254721Semaste
201254721Semaste    // The call below confusing and should really be renamed to "CreateBasicType"
202254721Semaste    lldb::SBType
203254721Semaste    GetBasicType(lldb::BasicType type);
204254721Semaste
205254721Semaste    uint32_t
206254721Semaste    GetNumberOfFields ();
207254721Semaste
208254721Semaste    uint32_t
209254721Semaste    GetNumberOfDirectBaseClasses ();
210254721Semaste
211254721Semaste    uint32_t
212254721Semaste    GetNumberOfVirtualBaseClasses ();
213254721Semaste
214254721Semaste    lldb::SBTypeMember
215254721Semaste    GetFieldAtIndex (uint32_t idx);
216254721Semaste
217254721Semaste    lldb::SBTypeMember
218254721Semaste    GetDirectBaseClassAtIndex (uint32_t idx);
219254721Semaste
220254721Semaste    lldb::SBTypeMember
221254721Semaste    GetVirtualBaseClassAtIndex (uint32_t idx);
222254721Semaste
223276479Sdim    lldb::SBTypeEnumMemberList
224276479Sdim    GetEnumMembers();
225276479Sdim
226254721Semaste    uint32_t
227254721Semaste    GetNumberOfTemplateArguments ();
228254721Semaste
229254721Semaste    lldb::SBType
230254721Semaste    GetTemplateArgumentType (uint32_t idx);
231254721Semaste
232254721Semaste    lldb::TemplateArgumentKind
233254721Semaste    GetTemplateArgumentKind (uint32_t idx);
234254721Semaste
235254721Semaste    lldb::SBType
236254721Semaste    GetFunctionReturnType ();
237254721Semaste
238254721Semaste    lldb::SBTypeList
239254721Semaste    GetFunctionArgumentTypes ();
240280031Sdim
241280031Sdim    uint32_t
242280031Sdim    GetNumberOfMemberFunctions ();
243280031Sdim
244280031Sdim    lldb::SBTypeMemberFunction
245280031Sdim    GetMemberFunctionAtIndex (uint32_t idx);
246254721Semaste
247254721Semaste    const char*
248254721Semaste    GetName();
249254721Semaste
250276479Sdim    const char *
251276479Sdim    GetDisplayTypeName ();
252276479Sdim
253254721Semaste    lldb::TypeClass
254254721Semaste    GetTypeClass ();
255254721Semaste
256254721Semaste    bool
257254721Semaste    IsTypeComplete ();
258280031Sdim
259280031Sdim    uint32_t
260280031Sdim    GetTypeFlags ();
261254721Semaste
262254721Semaste    bool
263254721Semaste    GetDescription (lldb::SBStream &description,
264254721Semaste                    lldb::DescriptionLevel description_level);
265254721Semaste
266254721Semaste    lldb::SBType &
267254721Semaste    operator = (const lldb::SBType &rhs);
268254721Semaste
269254721Semaste    bool
270254721Semaste    operator == (lldb::SBType &rhs);
271254721Semaste
272254721Semaste    bool
273254721Semaste    operator != (lldb::SBType &rhs);
274254721Semaste
275254721Semasteprotected:
276254721Semaste
277254721Semaste    lldb_private::TypeImpl &
278254721Semaste    ref ();
279254721Semaste
280254721Semaste    const lldb_private::TypeImpl &
281254721Semaste    ref () const;
282254721Semaste
283254721Semaste    lldb::TypeImplSP
284254721Semaste    GetSP ();
285254721Semaste
286254721Semaste    void
287254721Semaste    SetSP (const lldb::TypeImplSP &type_impl_sp);
288254721Semaste
289254721Semaste    lldb::TypeImplSP m_opaque_sp;
290254721Semaste
291254721Semaste    friend class SBFunction;
292254721Semaste    friend class SBModule;
293254721Semaste    friend class SBTarget;
294276479Sdim    friend class SBTypeEnumMember;
295276479Sdim    friend class SBTypeEnumMemberList;
296254721Semaste    friend class SBTypeNameSpecifier;
297254721Semaste    friend class SBTypeMember;
298280031Sdim    friend class SBTypeMemberFunction;
299254721Semaste    friend class SBTypeList;
300254721Semaste    friend class SBValue;
301254721Semaste
302296417Sdim    SBType (const lldb_private::CompilerType &);
303254721Semaste    SBType (const lldb::TypeSP &);
304254721Semaste    SBType (const lldb::TypeImplSP &);
305254721Semaste
306254721Semaste};
307254721Semaste
308254721Semasteclass SBTypeList
309254721Semaste{
310254721Semastepublic:
311254721Semaste    SBTypeList();
312254721Semaste
313254721Semaste    SBTypeList(const lldb::SBTypeList& rhs);
314254721Semaste
315254721Semaste    ~SBTypeList();
316254721Semaste
317254721Semaste    lldb::SBTypeList&
318254721Semaste    operator = (const lldb::SBTypeList& rhs);
319254721Semaste
320254721Semaste    bool
321254721Semaste    IsValid();
322254721Semaste
323254721Semaste    void
324254721Semaste    Append (lldb::SBType type);
325254721Semaste
326254721Semaste    lldb::SBType
327254721Semaste    GetTypeAtIndex (uint32_t index);
328254721Semaste
329254721Semaste    uint32_t
330254721Semaste    GetSize();
331254721Semaste
332254721Semaste
333254721Semasteprivate:
334254721Semaste    std::unique_ptr<lldb_private::TypeListImpl> m_opaque_ap;
335254721Semaste    friend class SBModule;
336254721Semaste    friend class SBCompileUnit;
337254721Semaste};
338254721Semaste
339254721Semaste
340254721Semaste} // namespace lldb
341254721Semaste
342254721Semaste#endif // LLDB_SBType_h_
343