1*30fdc8d8SChris Lattner //===-- StackID.cpp ---------------------------------------------*- C++ -*-===//
2*30fdc8d8SChris Lattner //
3*30fdc8d8SChris Lattner //                     The LLVM Compiler Infrastructure
4*30fdc8d8SChris Lattner //
5*30fdc8d8SChris Lattner // This file is distributed under the University of Illinois Open Source
6*30fdc8d8SChris Lattner // License. See LICENSE.TXT for details.
7*30fdc8d8SChris Lattner //
8*30fdc8d8SChris Lattner //===----------------------------------------------------------------------===//
9*30fdc8d8SChris Lattner 
10*30fdc8d8SChris Lattner #include "lldb/Target/StackID.h"
11*30fdc8d8SChris Lattner 
12*30fdc8d8SChris Lattner // C Includes
13*30fdc8d8SChris Lattner // C++ Includes
14*30fdc8d8SChris Lattner // Other libraries and framework includes
15*30fdc8d8SChris Lattner // Project includes
16*30fdc8d8SChris Lattner 
17*30fdc8d8SChris Lattner using namespace lldb_private;
18*30fdc8d8SChris Lattner 
19*30fdc8d8SChris Lattner //----------------------------------------------------------------------
20*30fdc8d8SChris Lattner // StackID constructor
21*30fdc8d8SChris Lattner //----------------------------------------------------------------------
22*30fdc8d8SChris Lattner StackID::StackID() :
23*30fdc8d8SChris Lattner     m_start_address(),
24*30fdc8d8SChris Lattner     m_cfa()
25*30fdc8d8SChris Lattner {
26*30fdc8d8SChris Lattner }
27*30fdc8d8SChris Lattner 
28*30fdc8d8SChris Lattner //----------------------------------------------------------------------
29*30fdc8d8SChris Lattner // StackID constructor with args
30*30fdc8d8SChris Lattner //----------------------------------------------------------------------
31*30fdc8d8SChris Lattner StackID::StackID (const Address& start_address, lldb::addr_t cfa) :
32*30fdc8d8SChris Lattner     m_start_address (start_address),
33*30fdc8d8SChris Lattner     m_cfa (cfa)
34*30fdc8d8SChris Lattner {
35*30fdc8d8SChris Lattner }
36*30fdc8d8SChris Lattner 
37*30fdc8d8SChris Lattner StackID::StackID (lldb::addr_t cfa) :
38*30fdc8d8SChris Lattner     m_start_address (),
39*30fdc8d8SChris Lattner     m_cfa (cfa)
40*30fdc8d8SChris Lattner {
41*30fdc8d8SChris Lattner }
42*30fdc8d8SChris Lattner 
43*30fdc8d8SChris Lattner //----------------------------------------------------------------------
44*30fdc8d8SChris Lattner // StackID copy constructor
45*30fdc8d8SChris Lattner //----------------------------------------------------------------------
46*30fdc8d8SChris Lattner StackID::StackID(const StackID& rhs) :
47*30fdc8d8SChris Lattner     m_start_address (rhs.m_start_address),
48*30fdc8d8SChris Lattner     m_cfa (rhs.m_cfa)
49*30fdc8d8SChris Lattner {
50*30fdc8d8SChris Lattner }
51*30fdc8d8SChris Lattner 
52*30fdc8d8SChris Lattner //----------------------------------------------------------------------
53*30fdc8d8SChris Lattner // StackID assignment operator
54*30fdc8d8SChris Lattner //----------------------------------------------------------------------
55*30fdc8d8SChris Lattner const StackID&
56*30fdc8d8SChris Lattner StackID::operator=(const StackID& rhs)
57*30fdc8d8SChris Lattner {
58*30fdc8d8SChris Lattner     if (this != &rhs)
59*30fdc8d8SChris Lattner     {
60*30fdc8d8SChris Lattner         m_start_address = rhs.m_start_address;
61*30fdc8d8SChris Lattner         m_cfa = rhs.m_cfa;
62*30fdc8d8SChris Lattner     }
63*30fdc8d8SChris Lattner     return *this;
64*30fdc8d8SChris Lattner }
65*30fdc8d8SChris Lattner 
66*30fdc8d8SChris Lattner //----------------------------------------------------------------------
67*30fdc8d8SChris Lattner // Destructor
68*30fdc8d8SChris Lattner //----------------------------------------------------------------------
69*30fdc8d8SChris Lattner StackID::~StackID()
70*30fdc8d8SChris Lattner {
71*30fdc8d8SChris Lattner }
72*30fdc8d8SChris Lattner 
73*30fdc8d8SChris Lattner 
74*30fdc8d8SChris Lattner const Address&
75*30fdc8d8SChris Lattner StackID::GetStartAddress() const
76*30fdc8d8SChris Lattner {
77*30fdc8d8SChris Lattner     return m_start_address;
78*30fdc8d8SChris Lattner }
79*30fdc8d8SChris Lattner 
80*30fdc8d8SChris Lattner void
81*30fdc8d8SChris Lattner StackID::SetStartAddress(const Address& start_address)
82*30fdc8d8SChris Lattner {
83*30fdc8d8SChris Lattner     m_start_address = start_address;
84*30fdc8d8SChris Lattner }
85*30fdc8d8SChris Lattner 
86*30fdc8d8SChris Lattner lldb::addr_t
87*30fdc8d8SChris Lattner StackID::GetCallFrameAddress() const
88*30fdc8d8SChris Lattner {
89*30fdc8d8SChris Lattner     return m_cfa;
90*30fdc8d8SChris Lattner }
91*30fdc8d8SChris Lattner 
92*30fdc8d8SChris Lattner 
93*30fdc8d8SChris Lattner bool
94*30fdc8d8SChris Lattner lldb_private::operator== (const StackID& lhs, const StackID& rhs)
95*30fdc8d8SChris Lattner {
96*30fdc8d8SChris Lattner     return lhs.GetCallFrameAddress() == rhs.GetCallFrameAddress() && lhs.GetStartAddress() == rhs.GetStartAddress();
97*30fdc8d8SChris Lattner }
98*30fdc8d8SChris Lattner 
99*30fdc8d8SChris Lattner bool
100*30fdc8d8SChris Lattner lldb_private::operator!= (const StackID& lhs, const StackID& rhs)
101*30fdc8d8SChris Lattner {
102*30fdc8d8SChris Lattner     return lhs.GetCallFrameAddress() != rhs.GetCallFrameAddress() || lhs.GetStartAddress() != rhs.GetStartAddress();
103*30fdc8d8SChris Lattner }
104*30fdc8d8SChris Lattner 
105*30fdc8d8SChris Lattner bool
106*30fdc8d8SChris Lattner lldb_private::operator< (const StackID& lhs, const StackID& rhs)
107*30fdc8d8SChris Lattner {
108*30fdc8d8SChris Lattner     return lhs.GetCallFrameAddress() < rhs.GetCallFrameAddress();
109*30fdc8d8SChris Lattner }
110*30fdc8d8SChris Lattner 
111