1 //===-- SBSymbolContextList.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/SBSymbolContextList.h" 10 #include "lldb/API/SBStream.h" 11 #include "lldb/Symbol/SymbolContext.h" 12 13 using namespace lldb; 14 using namespace lldb_private; 15 16 SBSymbolContextList::SBSymbolContextList() 17 : m_opaque_ap(new SymbolContextList()) {} 18 19 SBSymbolContextList::SBSymbolContextList(const SBSymbolContextList &rhs) 20 : m_opaque_ap(new SymbolContextList(*rhs.m_opaque_ap)) {} 21 22 SBSymbolContextList::~SBSymbolContextList() {} 23 24 const SBSymbolContextList &SBSymbolContextList:: 25 operator=(const SBSymbolContextList &rhs) { 26 if (this != &rhs) { 27 *m_opaque_ap = *rhs.m_opaque_ap; 28 } 29 return *this; 30 } 31 32 uint32_t SBSymbolContextList::GetSize() const { 33 if (m_opaque_ap) 34 return m_opaque_ap->GetSize(); 35 return 0; 36 } 37 38 SBSymbolContext SBSymbolContextList::GetContextAtIndex(uint32_t idx) { 39 SBSymbolContext sb_sc; 40 if (m_opaque_ap) { 41 SymbolContext sc; 42 if (m_opaque_ap->GetContextAtIndex(idx, sc)) { 43 sb_sc.SetSymbolContext(&sc); 44 } 45 } 46 return sb_sc; 47 } 48 49 void SBSymbolContextList::Clear() { 50 if (m_opaque_ap) 51 m_opaque_ap->Clear(); 52 } 53 54 void SBSymbolContextList::Append(SBSymbolContext &sc) { 55 if (sc.IsValid() && m_opaque_ap.get()) 56 m_opaque_ap->Append(*sc); 57 } 58 59 void SBSymbolContextList::Append(SBSymbolContextList &sc_list) { 60 if (sc_list.IsValid() && m_opaque_ap.get()) 61 m_opaque_ap->Append(*sc_list); 62 } 63 64 bool SBSymbolContextList::IsValid() const { return m_opaque_ap != NULL; } 65 66 lldb_private::SymbolContextList *SBSymbolContextList::operator->() const { 67 return m_opaque_ap.get(); 68 } 69 70 lldb_private::SymbolContextList &SBSymbolContextList::operator*() const { 71 assert(m_opaque_ap.get()); 72 return *m_opaque_ap; 73 } 74 75 bool SBSymbolContextList::GetDescription(lldb::SBStream &description) { 76 Stream &strm = description.ref(); 77 if (m_opaque_ap) 78 m_opaque_ap->GetDescription(&strm, lldb::eDescriptionLevelFull, NULL); 79 return true; 80 } 81