blob: 8b8294c645372f60d1cf1569708bab7b0c5c0330 [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001//===-- SBAddress.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/SBAddress.h"
11#include "lldb/API/SBProcess.h"
12#include "lldb/Core/Address.h"
13
14using namespace lldb;
15
16
17SBAddress::SBAddress () :
Greg Clayton63094e02010-06-23 01:19:29 +000018 m_opaque_ap ()
Chris Lattner24943d22010-06-08 16:52:24 +000019{
20}
21
22SBAddress::SBAddress (const lldb_private::Address *lldb_object_ptr) :
Greg Clayton63094e02010-06-23 01:19:29 +000023 m_opaque_ap ()
Chris Lattner24943d22010-06-08 16:52:24 +000024{
25 if (lldb_object_ptr)
Greg Clayton63094e02010-06-23 01:19:29 +000026 m_opaque_ap.reset (new lldb_private::Address(*lldb_object_ptr));
Chris Lattner24943d22010-06-08 16:52:24 +000027}
28
29SBAddress::SBAddress (const SBAddress &rhs) :
Greg Clayton63094e02010-06-23 01:19:29 +000030 m_opaque_ap ()
Chris Lattner24943d22010-06-08 16:52:24 +000031{
32 if (rhs.IsValid())
Greg Clayton63094e02010-06-23 01:19:29 +000033 m_opaque_ap.reset (new lldb_private::Address(*rhs.m_opaque_ap.get()));
Chris Lattner24943d22010-06-08 16:52:24 +000034}
35
36SBAddress::~SBAddress ()
37{
38}
39
40const SBAddress &
41SBAddress::operator = (const SBAddress &rhs)
42{
43 if (this != &rhs)
44 {
45 if (rhs.IsValid())
Greg Clayton63094e02010-06-23 01:19:29 +000046 m_opaque_ap.reset (new lldb_private::Address(*rhs.m_opaque_ap.get()));
Chris Lattner24943d22010-06-08 16:52:24 +000047 }
48 return *this;
49}
50
51bool
52SBAddress::IsValid () const
53{
Greg Clayton63094e02010-06-23 01:19:29 +000054 return m_opaque_ap.get() != NULL && m_opaque_ap->IsValid();
Chris Lattner24943d22010-06-08 16:52:24 +000055}
56
57void
Greg Clayton466f6c42010-09-10 18:31:35 +000058SBAddress::Clear ()
59{
60 m_opaque_ap.reset();
61}
62
63void
Chris Lattner24943d22010-06-08 16:52:24 +000064SBAddress::SetAddress (const lldb_private::Address *lldb_object_ptr)
65{
66 if (lldb_object_ptr)
67 {
Greg Clayton63094e02010-06-23 01:19:29 +000068 if (m_opaque_ap.get())
69 *m_opaque_ap = *lldb_object_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +000070 else
Greg Clayton63094e02010-06-23 01:19:29 +000071 m_opaque_ap.reset (new lldb_private::Address(*lldb_object_ptr));
Chris Lattner24943d22010-06-08 16:52:24 +000072 return;
73 }
Greg Clayton63094e02010-06-23 01:19:29 +000074 if (m_opaque_ap.get())
75 m_opaque_ap->Clear();
Chris Lattner24943d22010-06-08 16:52:24 +000076}
77
78lldb::addr_t
79SBAddress::GetFileAddress () const
80{
Greg Clayton63094e02010-06-23 01:19:29 +000081 if (m_opaque_ap.get())
82 return m_opaque_ap->GetFileAddress();
Chris Lattner24943d22010-06-08 16:52:24 +000083 else
84 return LLDB_INVALID_ADDRESS;
85}
86
87lldb::addr_t
88SBAddress::GetLoadAddress (const SBProcess &process) const
89{
Greg Clayton63094e02010-06-23 01:19:29 +000090 if (m_opaque_ap.get())
91 return m_opaque_ap->GetLoadAddress(process.get());
Chris Lattner24943d22010-06-08 16:52:24 +000092 else
93 return LLDB_INVALID_ADDRESS;
94}
95
96bool
97SBAddress::OffsetAddress (addr_t offset)
98{
Greg Clayton63094e02010-06-23 01:19:29 +000099 if (m_opaque_ap.get())
Chris Lattner24943d22010-06-08 16:52:24 +0000100 {
Greg Clayton63094e02010-06-23 01:19:29 +0000101 addr_t addr_offset = m_opaque_ap->GetOffset();
Chris Lattner24943d22010-06-08 16:52:24 +0000102 if (addr_offset != LLDB_INVALID_ADDRESS)
103 {
Greg Clayton63094e02010-06-23 01:19:29 +0000104 m_opaque_ap->SetOffset(addr_offset + offset);
Chris Lattner24943d22010-06-08 16:52:24 +0000105 return true;
106 }
107 }
108 return false;
109}
110
Greg Clayton466f6c42010-09-10 18:31:35 +0000111lldb_private::Address *
112SBAddress::operator->()
113{
114 return m_opaque_ap.get();
115}
Chris Lattner24943d22010-06-08 16:52:24 +0000116
117const lldb_private::Address *
118SBAddress::operator->() const
119{
Greg Clayton63094e02010-06-23 01:19:29 +0000120 return m_opaque_ap.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000121}
122
Greg Clayton466f6c42010-09-10 18:31:35 +0000123lldb_private::Address &
124SBAddress::operator*()
125{
126 if (m_opaque_ap.get() == NULL)
127 m_opaque_ap.reset (new lldb_private::Address);
128 return *m_opaque_ap;
129}
130
Chris Lattner24943d22010-06-08 16:52:24 +0000131const lldb_private::Address &
132SBAddress::operator*() const
133{
Greg Clayton466f6c42010-09-10 18:31:35 +0000134 assert (m_opaque_ap.get());
Greg Clayton63094e02010-06-23 01:19:29 +0000135 return *m_opaque_ap;
Chris Lattner24943d22010-06-08 16:52:24 +0000136}
137
138