1 //===-- SBTypeEnumMember.cpp ---------------------------------- -*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "lldb/API/SBTypeEnumMember.h" 10 #include "lldb/API/SBDefines.h" 11 #include "lldb/API/SBStream.h" 12 #include "lldb/API/SBType.h" 13 #include "lldb/Symbol/CompilerType.h" 14 #include "lldb/Symbol/Type.h" 15 #include "lldb/Utility/Stream.h" 16 17 using namespace lldb; 18 using namespace lldb_private; 19 20 SBTypeEnumMember::SBTypeEnumMember() : m_opaque_sp() {} 21 22 SBTypeEnumMember::~SBTypeEnumMember() {} 23 SBTypeEnumMember::SBTypeEnumMember( 24 const lldb::TypeEnumMemberImplSP &enum_member_sp) 25 : m_opaque_sp(enum_member_sp) {} 26 27 SBTypeEnumMember::SBTypeEnumMember(const SBTypeEnumMember &rhs) 28 : m_opaque_sp() { 29 if (this != &rhs) { 30 if (rhs.IsValid()) 31 m_opaque_sp.reset(new TypeEnumMemberImpl(rhs.ref())); 32 } 33 } 34 35 SBTypeEnumMember &SBTypeEnumMember::operator=(const SBTypeEnumMember &rhs) { 36 if (this != &rhs) { 37 if (rhs.IsValid()) 38 m_opaque_sp.reset(new TypeEnumMemberImpl(rhs.ref())); 39 } 40 return *this; 41 } 42 43 bool SBTypeEnumMember::IsValid() const { return m_opaque_sp.get(); } 44 45 const char *SBTypeEnumMember::GetName() { 46 if (m_opaque_sp.get()) 47 return m_opaque_sp->GetName().GetCString(); 48 return NULL; 49 } 50 51 int64_t SBTypeEnumMember::GetValueAsSigned() { 52 if (m_opaque_sp.get()) 53 return m_opaque_sp->GetValueAsSigned(); 54 return 0; 55 } 56 57 uint64_t SBTypeEnumMember::GetValueAsUnsigned() { 58 if (m_opaque_sp.get()) 59 return m_opaque_sp->GetValueAsUnsigned(); 60 return 0; 61 } 62 63 SBType SBTypeEnumMember::GetType() { 64 SBType sb_type; 65 if (m_opaque_sp.get()) { 66 sb_type.SetSP(m_opaque_sp->GetIntegerType()); 67 } 68 return sb_type; 69 } 70 71 void SBTypeEnumMember::reset(TypeEnumMemberImpl *type_member_impl) { 72 m_opaque_sp.reset(type_member_impl); 73 } 74 75 TypeEnumMemberImpl &SBTypeEnumMember::ref() { 76 if (m_opaque_sp.get() == NULL) 77 m_opaque_sp.reset(new TypeEnumMemberImpl()); 78 return *m_opaque_sp.get(); 79 } 80 81 const TypeEnumMemberImpl &SBTypeEnumMember::ref() const { 82 return *m_opaque_sp.get(); 83 } 84 85 SBTypeEnumMemberList::SBTypeEnumMemberList() 86 : m_opaque_ap(new TypeEnumMemberListImpl()) {} 87 88 SBTypeEnumMemberList::SBTypeEnumMemberList(const SBTypeEnumMemberList &rhs) 89 : m_opaque_ap(new TypeEnumMemberListImpl()) { 90 for (uint32_t i = 0, 91 rhs_size = const_cast<SBTypeEnumMemberList &>(rhs).GetSize(); 92 i < rhs_size; i++) 93 Append(const_cast<SBTypeEnumMemberList &>(rhs).GetTypeEnumMemberAtIndex(i)); 94 } 95 96 bool SBTypeEnumMemberList::IsValid() { return (m_opaque_ap != NULL); } 97 98 SBTypeEnumMemberList &SBTypeEnumMemberList:: 99 operator=(const SBTypeEnumMemberList &rhs) { 100 if (this != &rhs) { 101 m_opaque_ap.reset(new TypeEnumMemberListImpl()); 102 for (uint32_t i = 0, 103 rhs_size = const_cast<SBTypeEnumMemberList &>(rhs).GetSize(); 104 i < rhs_size; i++) 105 Append( 106 const_cast<SBTypeEnumMemberList &>(rhs).GetTypeEnumMemberAtIndex(i)); 107 } 108 return *this; 109 } 110 111 void SBTypeEnumMemberList::Append(SBTypeEnumMember enum_member) { 112 if (enum_member.IsValid()) 113 m_opaque_ap->Append(enum_member.m_opaque_sp); 114 } 115 116 SBTypeEnumMember 117 SBTypeEnumMemberList::GetTypeEnumMemberAtIndex(uint32_t index) { 118 if (m_opaque_ap) 119 return SBTypeEnumMember(m_opaque_ap->GetTypeEnumMemberAtIndex(index)); 120 return SBTypeEnumMember(); 121 } 122 123 uint32_t SBTypeEnumMemberList::GetSize() { return m_opaque_ap->GetSize(); } 124 125 SBTypeEnumMemberList::~SBTypeEnumMemberList() {} 126 127 bool SBTypeEnumMember::GetDescription( 128 lldb::SBStream &description, lldb::DescriptionLevel description_level) { 129 Stream &strm = description.ref(); 130 131 if (m_opaque_sp.get()) { 132 if (m_opaque_sp->GetIntegerType()->GetDescription(strm, 133 description_level)) { 134 strm.Printf(" %s", m_opaque_sp->GetName().GetCString()); 135 } 136 } else { 137 strm.PutCString("No value"); 138 } 139 return true; 140 } 141