1 //===-- SBModule.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/SBModule.h"
11 #include "lldb/API/SBAddress.h"
12 #include "lldb/API/SBFileSpec.h"
13 #include "lldb/API/SBFileSpec.h"
14 #include "lldb/Core/Module.h"
15 
16 using namespace lldb;
17 
18 
19 SBModule::SBModule () :
20     m_opaque_sp ()
21 {
22 }
23 
24 SBModule::SBModule (const lldb::ModuleSP& module_sp) :
25     m_opaque_sp (module_sp)
26 {
27 }
28 
29 SBModule::~SBModule ()
30 {
31 }
32 
33 bool
34 SBModule::IsValid () const
35 {
36     return m_opaque_sp.get() != NULL;
37 }
38 
39 SBFileSpec
40 SBModule::GetFileSpec () const
41 {
42     SBFileSpec file_spec;
43     if (m_opaque_sp)
44         file_spec.SetFileSpec(m_opaque_sp->GetFileSpec());
45     return file_spec;
46 }
47 
48 const uint8_t *
49 SBModule::GetUUIDBytes () const
50 {
51     if (m_opaque_sp)
52         return (const uint8_t *)m_opaque_sp->GetUUID().GetBytes();
53     return NULL;
54 }
55 
56 
57 bool
58 SBModule::operator == (const SBModule &rhs) const
59 {
60     if (m_opaque_sp)
61         return m_opaque_sp.get() == rhs.m_opaque_sp.get();
62     return false;
63 }
64 
65 bool
66 SBModule::operator != (const SBModule &rhs) const
67 {
68     if (m_opaque_sp)
69         return m_opaque_sp.get() != rhs.m_opaque_sp.get();
70     return false;
71 }
72 
73 lldb::ModuleSP &
74 SBModule::operator *()
75 {
76     return m_opaque_sp;
77 }
78 
79 lldb_private::Module *
80 SBModule::operator ->()
81 {
82     return m_opaque_sp.get();
83 }
84 
85 const lldb_private::Module *
86 SBModule::operator ->() const
87 {
88     return m_opaque_sp.get();
89 }
90 
91 lldb_private::Module *
92 SBModule::get()
93 {
94     return m_opaque_sp.get();
95 }
96 
97 const lldb_private::Module *
98 SBModule::get() const
99 {
100     return m_opaque_sp.get();
101 }
102 
103 
104 void
105 SBModule::SetModule (const lldb::ModuleSP& module_sp)
106 {
107     m_opaque_sp = module_sp;
108 }
109 
110 
111 bool
112 SBModule::ResolveFileAddress (lldb::addr_t vm_addr, SBAddress& addr)
113 {
114     if (m_opaque_sp)
115         return m_opaque_sp->ResolveFileAddress (vm_addr, *addr);
116 
117     addr->Clear();
118     return false;
119 }
120 
121 SBSymbolContext
122 SBModule::ResolveSymbolContextForAddress (const SBAddress& addr, uint32_t resolve_scope)
123 {
124     SBSymbolContext sb_sc;
125     if (m_opaque_sp && addr.IsValid())
126         m_opaque_sp->ResolveSymbolContextForAddress (*addr, resolve_scope, *sb_sc);
127     return sb_sc;
128 }
129 
130