1 //===-- SBTypeEnumMember.cpp ---------------------------------- -*- 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 #include "lldb/API/SBDefines.h" 11 #include "lldb/API/SBType.h" 12 #include "lldb/API/SBTypeEnumMember.h" 13 #include "lldb/API/SBStream.h" 14 #include "lldb/Core/Stream.h" 15 #include "lldb/Symbol/CompilerType.h" 16 #include "lldb/Symbol/Type.h" 17 18 using namespace lldb; 19 using namespace lldb_private; 20 21 SBTypeEnumMember::SBTypeEnumMember() : 22 m_opaque_sp() 23 { 24 } 25 26 SBTypeEnumMember::~SBTypeEnumMember() 27 { 28 } 29 SBTypeEnumMember::SBTypeEnumMember (const lldb::TypeEnumMemberImplSP &enum_member_sp) : 30 m_opaque_sp(enum_member_sp) 31 { 32 } 33 34 SBTypeEnumMember::SBTypeEnumMember (const SBTypeEnumMember& rhs) : 35 m_opaque_sp() 36 { 37 if (this != &rhs) 38 { 39 if (rhs.IsValid()) 40 m_opaque_sp.reset(new TypeEnumMemberImpl(rhs.ref())); 41 } 42 } 43 44 SBTypeEnumMember& 45 SBTypeEnumMember::operator = (const SBTypeEnumMember& rhs) 46 { 47 if (this != &rhs) 48 { 49 if (rhs.IsValid()) 50 m_opaque_sp.reset(new TypeEnumMemberImpl(rhs.ref())); 51 } 52 return *this; 53 } 54 55 bool 56 SBTypeEnumMember::IsValid() const 57 { 58 return m_opaque_sp.get(); 59 } 60 61 const char * 62 SBTypeEnumMember::GetName () 63 { 64 if (m_opaque_sp.get()) 65 return m_opaque_sp->GetName().GetCString(); 66 return NULL; 67 } 68 69 int64_t 70 SBTypeEnumMember::GetValueAsSigned() 71 { 72 if (m_opaque_sp.get()) 73 return m_opaque_sp->GetValueAsSigned(); 74 return 0; 75 } 76 77 uint64_t 78 SBTypeEnumMember::GetValueAsUnsigned() 79 { 80 if (m_opaque_sp.get()) 81 return m_opaque_sp->GetValueAsUnsigned(); 82 return 0; 83 } 84 85 SBType 86 SBTypeEnumMember::GetType () 87 { 88 SBType sb_type; 89 if (m_opaque_sp.get()) 90 { 91 sb_type.SetSP(m_opaque_sp->GetIntegerType()); 92 } 93 return sb_type; 94 95 } 96 97 void 98 SBTypeEnumMember::reset(TypeEnumMemberImpl *type_member_impl) 99 { 100 m_opaque_sp.reset(type_member_impl); 101 } 102 103 TypeEnumMemberImpl & 104 SBTypeEnumMember::ref () 105 { 106 if (m_opaque_sp.get() == NULL) 107 m_opaque_sp.reset (new TypeEnumMemberImpl()); 108 return *m_opaque_sp.get(); 109 } 110 111 const TypeEnumMemberImpl & 112 SBTypeEnumMember::ref () const 113 { 114 return *m_opaque_sp.get(); 115 } 116 117 118 SBTypeEnumMemberList::SBTypeEnumMemberList() : 119 m_opaque_ap(new TypeEnumMemberListImpl()) 120 { 121 } 122 123 SBTypeEnumMemberList::SBTypeEnumMemberList(const SBTypeEnumMemberList& rhs) : 124 m_opaque_ap(new TypeEnumMemberListImpl()) 125 { 126 for (uint32_t i = 0, rhs_size = const_cast<SBTypeEnumMemberList&>(rhs).GetSize(); i < rhs_size; i++) 127 Append(const_cast<SBTypeEnumMemberList&>(rhs).GetTypeEnumMemberAtIndex(i)); 128 } 129 130 bool 131 SBTypeEnumMemberList::IsValid () 132 { 133 return (m_opaque_ap.get() != NULL); 134 } 135 136 SBTypeEnumMemberList& 137 SBTypeEnumMemberList::operator = (const SBTypeEnumMemberList& rhs) 138 { 139 if (this != &rhs) 140 { 141 m_opaque_ap.reset (new TypeEnumMemberListImpl()); 142 for (uint32_t i = 0, rhs_size = const_cast<SBTypeEnumMemberList&>(rhs).GetSize(); i < rhs_size; i++) 143 Append(const_cast<SBTypeEnumMemberList&>(rhs).GetTypeEnumMemberAtIndex(i)); 144 } 145 return *this; 146 } 147 148 void 149 SBTypeEnumMemberList::Append (SBTypeEnumMember enum_member) 150 { 151 if (enum_member.IsValid()) 152 m_opaque_ap->Append (enum_member.m_opaque_sp); 153 } 154 155 SBTypeEnumMember 156 SBTypeEnumMemberList::GetTypeEnumMemberAtIndex(uint32_t index) 157 { 158 if (m_opaque_ap.get()) 159 return SBTypeEnumMember(m_opaque_ap->GetTypeEnumMemberAtIndex(index)); 160 return SBTypeEnumMember(); 161 } 162 163 uint32_t 164 SBTypeEnumMemberList::GetSize() 165 { 166 return m_opaque_ap->GetSize(); 167 } 168 169 SBTypeEnumMemberList::~SBTypeEnumMemberList() 170 { 171 } 172 173 bool 174 SBTypeEnumMember::GetDescription (lldb::SBStream &description, 175 lldb::DescriptionLevel description_level) 176 { 177 Stream &strm = description.ref(); 178 179 if (m_opaque_sp.get()) 180 { 181 if( m_opaque_sp->GetIntegerType()->GetDescription(strm, description_level) ) 182 { 183 strm.Printf(" %s", m_opaque_sp->GetName().GetCString()); 184 } 185 } 186 else 187 { 188 strm.PutCString ("No value"); 189 } 190 return true; 191 } 192