1466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton//===-- SBSymbolContextList.cpp ---------------------------------*- C++ -*-===//
2466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton//
3466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton//                     The LLVM Compiler Infrastructure
4466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton//
5466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton// This file is distributed under the University of Illinois Open Source
6466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton// License. See LICENSE.TXT for details.
7466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton//
8466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton//===----------------------------------------------------------------------===//
9466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton
10466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton#include "lldb/API/SBSymbolContextList.h"
117dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton#include "lldb/API/SBStream.h"
12466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton#include "lldb/Symbol/SymbolContext.h"
13466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton
14466f6c4c0783c6b5197059caccab94faf1e605e9Greg Claytonusing namespace lldb;
15466f6c4c0783c6b5197059caccab94faf1e605e9Greg Claytonusing namespace lldb_private;
16466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton
17466f6c4c0783c6b5197059caccab94faf1e605e9Greg ClaytonSBSymbolContextList::SBSymbolContextList () :
184ed315fdc503cfdc18e89b1eb43bf87e07fd1673Greg Clayton    m_opaque_ap (new SymbolContextList())
19466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton{
20466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton}
21466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton
22466f6c4c0783c6b5197059caccab94faf1e605e9Greg ClaytonSBSymbolContextList::SBSymbolContextList (const SBSymbolContextList& rhs) :
234ed315fdc503cfdc18e89b1eb43bf87e07fd1673Greg Clayton    m_opaque_ap (new SymbolContextList(*rhs.m_opaque_ap))
24466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton{
25466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton}
26466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton
27466f6c4c0783c6b5197059caccab94faf1e605e9Greg ClaytonSBSymbolContextList::~SBSymbolContextList ()
28466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton{
29466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton}
30466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton
31466f6c4c0783c6b5197059caccab94faf1e605e9Greg Claytonconst SBSymbolContextList &
32466f6c4c0783c6b5197059caccab94faf1e605e9Greg ClaytonSBSymbolContextList::operator = (const SBSymbolContextList &rhs)
33466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton{
34466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton    if (this != &rhs)
35466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton    {
364ed315fdc503cfdc18e89b1eb43bf87e07fd1673Greg Clayton        *m_opaque_ap = *rhs.m_opaque_ap;
37466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton    }
38466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton    return *this;
39466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton}
40466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton
41466f6c4c0783c6b5197059caccab94faf1e605e9Greg Claytonuint32_t
42466f6c4c0783c6b5197059caccab94faf1e605e9Greg ClaytonSBSymbolContextList::GetSize() const
43466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton{
44466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton    if (m_opaque_ap.get())
45466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton        return m_opaque_ap->GetSize();
46466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton    return 0;
47466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton}
48466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton
49466f6c4c0783c6b5197059caccab94faf1e605e9Greg ClaytonSBSymbolContext
50466f6c4c0783c6b5197059caccab94faf1e605e9Greg ClaytonSBSymbolContextList::GetContextAtIndex (uint32_t idx)
51466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton{
52466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton    SBSymbolContext sb_sc;
53466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton    if (m_opaque_ap.get())
54466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton    {
55466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton        SymbolContext sc;
56466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton        if (m_opaque_ap->GetContextAtIndex (idx, sc))
57466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton        {
58466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton            sb_sc.SetSymbolContext(&sc);
59466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton        }
60466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton    }
61466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton    return sb_sc;
62466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton}
63466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton
644ed315fdc503cfdc18e89b1eb43bf87e07fd1673Greg Claytonvoid
654ed315fdc503cfdc18e89b1eb43bf87e07fd1673Greg ClaytonSBSymbolContextList::Clear()
664ed315fdc503cfdc18e89b1eb43bf87e07fd1673Greg Clayton{
674ed315fdc503cfdc18e89b1eb43bf87e07fd1673Greg Clayton    if (m_opaque_ap.get())
684ed315fdc503cfdc18e89b1eb43bf87e07fd1673Greg Clayton        m_opaque_ap->Clear();
694ed315fdc503cfdc18e89b1eb43bf87e07fd1673Greg Clayton}
704ed315fdc503cfdc18e89b1eb43bf87e07fd1673Greg Clayton
717dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Claytonvoid
727dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg ClaytonSBSymbolContextList::Append(SBSymbolContext &sc)
737dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton{
747dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    if (sc.IsValid() && m_opaque_ap.get())
757dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton        m_opaque_ap->Append(*sc);
767dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton}
777dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton
787dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Claytonvoid
797dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg ClaytonSBSymbolContextList::Append(SBSymbolContextList &sc_list)
807dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton{
817dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    if (sc_list.IsValid() && m_opaque_ap.get())
827dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton        m_opaque_ap->Append(*sc_list);
837dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton}
847dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton
85466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton
86466f6c4c0783c6b5197059caccab94faf1e605e9Greg Claytonbool
87466f6c4c0783c6b5197059caccab94faf1e605e9Greg ClaytonSBSymbolContextList::IsValid () const
88466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton{
89466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton    return m_opaque_ap.get() != NULL;
90466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton}
91466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton
92466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton
93466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton
94466f6c4c0783c6b5197059caccab94faf1e605e9Greg Claytonlldb_private::SymbolContextList*
95466f6c4c0783c6b5197059caccab94faf1e605e9Greg ClaytonSBSymbolContextList::operator->() const
96466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton{
97466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton    return m_opaque_ap.get();
98466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton}
99466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton
100466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton
101466f6c4c0783c6b5197059caccab94faf1e605e9Greg Claytonlldb_private::SymbolContextList&
102466f6c4c0783c6b5197059caccab94faf1e605e9Greg ClaytonSBSymbolContextList::operator*() const
103466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton{
104466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton    assert (m_opaque_ap.get());
105466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton    return *m_opaque_ap.get();
106466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton}
107466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton
1087dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Claytonbool
1097dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg ClaytonSBSymbolContextList::GetDescription (lldb::SBStream &description)
1107dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton{
1117dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    Stream &strm = description.ref();
1127dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    if (m_opaque_ap.get())
1137dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton        m_opaque_ap->GetDescription (&strm, lldb::eDescriptionLevelFull, NULL);
1147dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    return true;
1157dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton}
116466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton
117466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton
118