130fdc8d8SChris Lattner //===-- SBLineEntry.cpp -----------------------------------------*- C++ -*-===//
230fdc8d8SChris Lattner //
330fdc8d8SChris Lattner //                     The LLVM Compiler Infrastructure
430fdc8d8SChris Lattner //
530fdc8d8SChris Lattner // This file is distributed under the University of Illinois Open Source
630fdc8d8SChris Lattner // License. See LICENSE.TXT for details.
730fdc8d8SChris Lattner //
830fdc8d8SChris Lattner //===----------------------------------------------------------------------===//
930fdc8d8SChris Lattner 
1030fdc8d8SChris Lattner #include "lldb/API/SBLineEntry.h"
1130fdc8d8SChris Lattner #include "lldb/Symbol/LineEntry.h"
1230fdc8d8SChris Lattner 
1330fdc8d8SChris Lattner using namespace lldb;
1430fdc8d8SChris Lattner 
1530fdc8d8SChris Lattner 
1630fdc8d8SChris Lattner SBLineEntry::SBLineEntry () :
17*6611103cSGreg Clayton     m_opaque_ap ()
1830fdc8d8SChris Lattner {
1930fdc8d8SChris Lattner }
2030fdc8d8SChris Lattner 
2130fdc8d8SChris Lattner SBLineEntry::SBLineEntry (const SBLineEntry &rhs) :
22*6611103cSGreg Clayton     m_opaque_ap ()
2330fdc8d8SChris Lattner {
2430fdc8d8SChris Lattner     if (rhs.IsValid())
2530fdc8d8SChris Lattner     {
26*6611103cSGreg Clayton         m_opaque_ap.reset (new lldb_private::LineEntry (*rhs));
2730fdc8d8SChris Lattner     }
2830fdc8d8SChris Lattner }
2930fdc8d8SChris Lattner 
3030fdc8d8SChris Lattner 
3130fdc8d8SChris Lattner 
3230fdc8d8SChris Lattner SBLineEntry::SBLineEntry (const lldb_private::LineEntry *lldb_object_ptr) :
33*6611103cSGreg Clayton     m_opaque_ap ()
3430fdc8d8SChris Lattner {
3530fdc8d8SChris Lattner     if (lldb_object_ptr)
36*6611103cSGreg Clayton         m_opaque_ap.reset (new lldb_private::LineEntry(*lldb_object_ptr));
3730fdc8d8SChris Lattner }
3830fdc8d8SChris Lattner 
3930fdc8d8SChris Lattner const SBLineEntry &
4030fdc8d8SChris Lattner SBLineEntry::operator = (const SBLineEntry &rhs)
4130fdc8d8SChris Lattner {
4230fdc8d8SChris Lattner     if (this != &rhs)
4330fdc8d8SChris Lattner     {
4430fdc8d8SChris Lattner         if (rhs.IsValid())
45*6611103cSGreg Clayton             m_opaque_ap.reset (new lldb_private::LineEntry(*rhs));
4630fdc8d8SChris Lattner     }
4730fdc8d8SChris Lattner     return *this;
4830fdc8d8SChris Lattner }
4930fdc8d8SChris Lattner 
5030fdc8d8SChris Lattner void
5130fdc8d8SChris Lattner SBLineEntry::SetLineEntry (const lldb_private::LineEntry &lldb_object_ref)
5230fdc8d8SChris Lattner {
53*6611103cSGreg Clayton     if (m_opaque_ap.get())
54*6611103cSGreg Clayton         (*m_opaque_ap.get()) = lldb_object_ref;
5530fdc8d8SChris Lattner     else
56*6611103cSGreg Clayton         m_opaque_ap.reset (new lldb_private::LineEntry (lldb_object_ref));
5730fdc8d8SChris Lattner }
5830fdc8d8SChris Lattner 
5930fdc8d8SChris Lattner 
6030fdc8d8SChris Lattner SBLineEntry::~SBLineEntry ()
6130fdc8d8SChris Lattner {
6230fdc8d8SChris Lattner }
6330fdc8d8SChris Lattner 
6430fdc8d8SChris Lattner 
6530fdc8d8SChris Lattner SBAddress
6630fdc8d8SChris Lattner SBLineEntry::GetStartAddress () const
6730fdc8d8SChris Lattner {
6830fdc8d8SChris Lattner     SBAddress sb_address;
69*6611103cSGreg Clayton     if (m_opaque_ap.get())
70*6611103cSGreg Clayton         sb_address.SetAddress(&m_opaque_ap->range.GetBaseAddress());
7130fdc8d8SChris Lattner     return sb_address;
7230fdc8d8SChris Lattner }
7330fdc8d8SChris Lattner 
7430fdc8d8SChris Lattner SBAddress
7530fdc8d8SChris Lattner SBLineEntry::GetEndAddress () const
7630fdc8d8SChris Lattner {
7730fdc8d8SChris Lattner     SBAddress sb_address;
78*6611103cSGreg Clayton     if (m_opaque_ap.get())
7930fdc8d8SChris Lattner     {
80*6611103cSGreg Clayton         sb_address.SetAddress(&m_opaque_ap->range.GetBaseAddress());
81*6611103cSGreg Clayton         sb_address.OffsetAddress(m_opaque_ap->range.GetByteSize());
8230fdc8d8SChris Lattner     }
8330fdc8d8SChris Lattner     return sb_address;
8430fdc8d8SChris Lattner }
8530fdc8d8SChris Lattner 
8630fdc8d8SChris Lattner bool
8730fdc8d8SChris Lattner SBLineEntry::IsValid () const
8830fdc8d8SChris Lattner {
89*6611103cSGreg Clayton     return m_opaque_ap.get() != NULL;
9030fdc8d8SChris Lattner }
9130fdc8d8SChris Lattner 
9230fdc8d8SChris Lattner 
9330fdc8d8SChris Lattner SBFileSpec
9430fdc8d8SChris Lattner SBLineEntry::GetFileSpec () const
9530fdc8d8SChris Lattner {
9630fdc8d8SChris Lattner     SBFileSpec sb_file_spec;
97*6611103cSGreg Clayton     if (m_opaque_ap.get() && m_opaque_ap->file)
98*6611103cSGreg Clayton         sb_file_spec.SetFileSpec(m_opaque_ap->file);
9930fdc8d8SChris Lattner     return sb_file_spec;
10030fdc8d8SChris Lattner }
10130fdc8d8SChris Lattner 
10230fdc8d8SChris Lattner uint32_t
10330fdc8d8SChris Lattner SBLineEntry::GetLine () const
10430fdc8d8SChris Lattner {
105*6611103cSGreg Clayton     if (m_opaque_ap.get())
106*6611103cSGreg Clayton         return m_opaque_ap->line;
10730fdc8d8SChris Lattner     return 0;
10830fdc8d8SChris Lattner }
10930fdc8d8SChris Lattner 
11030fdc8d8SChris Lattner 
11130fdc8d8SChris Lattner uint32_t
11230fdc8d8SChris Lattner SBLineEntry::GetColumn () const
11330fdc8d8SChris Lattner {
114*6611103cSGreg Clayton     if (m_opaque_ap.get())
115*6611103cSGreg Clayton         return m_opaque_ap->column;
11630fdc8d8SChris Lattner     return 0;
11730fdc8d8SChris Lattner }
11830fdc8d8SChris Lattner 
11930fdc8d8SChris Lattner bool
12030fdc8d8SChris Lattner SBLineEntry::operator == (const SBLineEntry &rhs) const
12130fdc8d8SChris Lattner {
122*6611103cSGreg Clayton     lldb_private::LineEntry *lhs_ptr = m_opaque_ap.get();
123*6611103cSGreg Clayton     lldb_private::LineEntry *rhs_ptr = rhs.m_opaque_ap.get();
12430fdc8d8SChris Lattner 
12530fdc8d8SChris Lattner     if (lhs_ptr && rhs_ptr)
12630fdc8d8SChris Lattner         return lldb_private::LineEntry::Compare (*lhs_ptr, *rhs_ptr) == 0;
12730fdc8d8SChris Lattner 
12830fdc8d8SChris Lattner     return lhs_ptr == rhs_ptr;
12930fdc8d8SChris Lattner }
13030fdc8d8SChris Lattner 
13130fdc8d8SChris Lattner bool
13230fdc8d8SChris Lattner SBLineEntry::operator != (const SBLineEntry &rhs) const
13330fdc8d8SChris Lattner {
134*6611103cSGreg Clayton     lldb_private::LineEntry *lhs_ptr = m_opaque_ap.get();
135*6611103cSGreg Clayton     lldb_private::LineEntry *rhs_ptr = rhs.m_opaque_ap.get();
13630fdc8d8SChris Lattner 
13730fdc8d8SChris Lattner     if (lhs_ptr && rhs_ptr)
13830fdc8d8SChris Lattner         return lldb_private::LineEntry::Compare (*lhs_ptr, *rhs_ptr) != 0;
13930fdc8d8SChris Lattner 
14030fdc8d8SChris Lattner     return lhs_ptr != rhs_ptr;
14130fdc8d8SChris Lattner }
14230fdc8d8SChris Lattner 
14330fdc8d8SChris Lattner const lldb_private::LineEntry *
14430fdc8d8SChris Lattner SBLineEntry::operator->() const
14530fdc8d8SChris Lattner {
146*6611103cSGreg Clayton     return m_opaque_ap.get();
14730fdc8d8SChris Lattner }
14830fdc8d8SChris Lattner 
14930fdc8d8SChris Lattner const lldb_private::LineEntry &
15030fdc8d8SChris Lattner SBLineEntry::operator*() const
15130fdc8d8SChris Lattner {
152*6611103cSGreg Clayton     return *m_opaque_ap;
15330fdc8d8SChris Lattner }
15430fdc8d8SChris Lattner 
15530fdc8d8SChris Lattner 
15630fdc8d8SChris Lattner 
15730fdc8d8SChris Lattner 
15830fdc8d8SChris Lattner 
159