1 //===-- SBType.h ------------------------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef LLDB_SBType_h_ 11 #define LLDB_SBType_h_ 12 13 #include "lldb/API/SBDefines.h" 14 15 namespace lldb { 16 17 class SBTypeList; 18 19 class SBTypeMember 20 { 21 public: 22 SBTypeMember (); 23 24 SBTypeMember (const lldb::SBTypeMember& rhs); 25 26 ~SBTypeMember(); 27 28 lldb::SBTypeMember& 29 operator = (const lldb::SBTypeMember& rhs); 30 31 bool 32 IsValid() const; 33 34 const char * 35 GetName (); 36 37 lldb::SBType 38 GetType (); 39 40 uint64_t 41 GetOffsetInBytes(); 42 43 uint64_t 44 GetOffsetInBits(); 45 46 bool 47 IsBitfield(); 48 49 uint32_t 50 GetBitfieldSizeInBits(); 51 52 bool 53 GetDescription (lldb::SBStream &description, 54 lldb::DescriptionLevel description_level); 55 56 protected: 57 friend class SBType; 58 59 void 60 reset (lldb_private::TypeMemberImpl *); 61 62 lldb_private::TypeMemberImpl & 63 ref (); 64 65 const lldb_private::TypeMemberImpl & 66 ref () const; 67 68 std::unique_ptr<lldb_private::TypeMemberImpl> m_opaque_ap; 69 }; 70 71 class SBType 72 { 73 public: 74 75 SBType(); 76 77 SBType (const lldb::SBType &rhs); 78 79 ~SBType (); 80 81 bool 82 IsValid() const; 83 84 uint64_t 85 GetByteSize(); 86 87 bool 88 IsPointerType(); 89 90 bool 91 IsReferenceType(); 92 93 bool 94 IsFunctionType (); 95 96 bool 97 IsPolymorphicClass (); 98 99 lldb::SBType 100 GetPointerType(); 101 102 lldb::SBType 103 GetPointeeType(); 104 105 lldb::SBType 106 GetReferenceType(); 107 108 lldb::SBType 109 GetDereferencedType(); 110 111 lldb::SBType 112 GetUnqualifiedType(); 113 114 lldb::SBType 115 GetCanonicalType(); 116 // Get the "lldb::BasicType" enumeration for a type. If a type is not a basic 117 // type eBasicTypeInvalid will be returned 118 lldb::BasicType 119 GetBasicType(); 120 121 // The call below confusing and should really be renamed to "CreateBasicType" 122 lldb::SBType 123 GetBasicType(lldb::BasicType type); 124 125 uint32_t 126 GetNumberOfFields (); 127 128 uint32_t 129 GetNumberOfDirectBaseClasses (); 130 131 uint32_t 132 GetNumberOfVirtualBaseClasses (); 133 134 lldb::SBTypeMember 135 GetFieldAtIndex (uint32_t idx); 136 137 lldb::SBTypeMember 138 GetDirectBaseClassAtIndex (uint32_t idx); 139 140 lldb::SBTypeMember 141 GetVirtualBaseClassAtIndex (uint32_t idx); 142 143 uint32_t 144 GetNumberOfTemplateArguments (); 145 146 lldb::SBType 147 GetTemplateArgumentType (uint32_t idx); 148 149 lldb::TemplateArgumentKind 150 GetTemplateArgumentKind (uint32_t idx); 151 152 lldb::SBType 153 GetFunctionReturnType (); 154 155 lldb::SBTypeList 156 GetFunctionArgumentTypes (); 157 158 const char* 159 GetName(); 160 161 lldb::TypeClass 162 GetTypeClass (); 163 164 bool 165 IsTypeComplete (); 166 167 bool 168 GetDescription (lldb::SBStream &description, 169 lldb::DescriptionLevel description_level); 170 171 lldb::SBType & 172 operator = (const lldb::SBType &rhs); 173 174 bool 175 operator == (lldb::SBType &rhs); 176 177 bool 178 operator != (lldb::SBType &rhs); 179 180 protected: 181 182 lldb_private::TypeImpl & 183 ref (); 184 185 const lldb_private::TypeImpl & 186 ref () const; 187 188 lldb::TypeImplSP 189 GetSP (); 190 191 void 192 SetSP (const lldb::TypeImplSP &type_impl_sp); 193 194 lldb::TypeImplSP m_opaque_sp; 195 196 friend class SBFunction; 197 friend class SBModule; 198 friend class SBTarget; 199 friend class SBTypeNameSpecifier; 200 friend class SBTypeMember; 201 friend class SBTypeList; 202 friend class SBValue; 203 204 SBType (const lldb_private::ClangASTType &); 205 SBType (const lldb::TypeSP &); 206 SBType (const lldb::TypeImplSP &); 207 208 }; 209 210 class SBTypeList 211 { 212 public: 213 SBTypeList(); 214 215 SBTypeList(const lldb::SBTypeList& rhs); 216 217 ~SBTypeList(); 218 219 lldb::SBTypeList& 220 operator = (const lldb::SBTypeList& rhs); 221 222 bool 223 IsValid(); 224 225 void 226 Append (lldb::SBType type); 227 228 lldb::SBType 229 GetTypeAtIndex (uint32_t index); 230 231 uint32_t 232 GetSize(); 233 234 235 private: 236 std::unique_ptr<lldb_private::TypeListImpl> m_opaque_ap; 237 friend class SBModule; 238 friend class SBCompileUnit; 239 }; 240 241 242 } // namespace lldb 243 244 #endif // LLDB_SBType_h_ 245