1*30fdc8d8SChris Lattner //===-- SBEvent.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 "SBEvent.h"
11*30fdc8d8SChris Lattner #include "SBBroadcaster.h"
12*30fdc8d8SChris Lattner 
13*30fdc8d8SChris Lattner #include "lldb/Core/Event.h"
14*30fdc8d8SChris Lattner #include "lldb/Core/Stream.h"
15*30fdc8d8SChris Lattner #include "lldb/Core/StreamFile.h"
16*30fdc8d8SChris Lattner #include "lldb/Core/ConstString.h"
17*30fdc8d8SChris Lattner #include "lldb/Target/Process.h"
18*30fdc8d8SChris Lattner #include "lldb/Breakpoint/Breakpoint.h"
19*30fdc8d8SChris Lattner #include "lldb/Interpreter/CommandInterpreter.h"
20*30fdc8d8SChris Lattner 
21*30fdc8d8SChris Lattner using namespace lldb;
22*30fdc8d8SChris Lattner using namespace lldb_private;
23*30fdc8d8SChris Lattner 
24*30fdc8d8SChris Lattner 
25*30fdc8d8SChris Lattner SBEvent::SBEvent () :
26*30fdc8d8SChris Lattner     m_event_sp (),
27*30fdc8d8SChris Lattner     m_lldb_object (NULL)
28*30fdc8d8SChris Lattner {
29*30fdc8d8SChris Lattner }
30*30fdc8d8SChris Lattner 
31*30fdc8d8SChris Lattner SBEvent::SBEvent (uint32_t event_type, const char *cstr, uint32_t cstr_len) :
32*30fdc8d8SChris Lattner     m_event_sp (new Event (event_type, new EventDataBytes (cstr, cstr_len))),
33*30fdc8d8SChris Lattner     m_lldb_object (m_event_sp.get())
34*30fdc8d8SChris Lattner {
35*30fdc8d8SChris Lattner }
36*30fdc8d8SChris Lattner 
37*30fdc8d8SChris Lattner SBEvent::SBEvent (EventSP &event_sp) :
38*30fdc8d8SChris Lattner     m_event_sp (event_sp),
39*30fdc8d8SChris Lattner     m_lldb_object (event_sp.get())
40*30fdc8d8SChris Lattner {
41*30fdc8d8SChris Lattner }
42*30fdc8d8SChris Lattner 
43*30fdc8d8SChris Lattner SBEvent::~SBEvent()
44*30fdc8d8SChris Lattner {
45*30fdc8d8SChris Lattner }
46*30fdc8d8SChris Lattner 
47*30fdc8d8SChris Lattner void
48*30fdc8d8SChris Lattner SBEvent::Dump (FILE *f) const
49*30fdc8d8SChris Lattner {
50*30fdc8d8SChris Lattner     const Event *lldb_event = GetLLDBObjectPtr();
51*30fdc8d8SChris Lattner     if (lldb_event)
52*30fdc8d8SChris Lattner     {
53*30fdc8d8SChris Lattner         StreamFile str(f);
54*30fdc8d8SChris Lattner         lldb_event->Dump ((Stream *) &str);
55*30fdc8d8SChris Lattner     }
56*30fdc8d8SChris Lattner }
57*30fdc8d8SChris Lattner 
58*30fdc8d8SChris Lattner const char *
59*30fdc8d8SChris Lattner SBEvent::GetDataFlavor ()
60*30fdc8d8SChris Lattner {
61*30fdc8d8SChris Lattner     Event *lldb_event = SBEvent::GetLLDBObjectPtr();
62*30fdc8d8SChris Lattner     if (lldb_event)
63*30fdc8d8SChris Lattner         return lldb_event->GetData()->GetFlavor().AsCString();
64*30fdc8d8SChris Lattner     return NULL;
65*30fdc8d8SChris Lattner }
66*30fdc8d8SChris Lattner 
67*30fdc8d8SChris Lattner uint32_t
68*30fdc8d8SChris Lattner SBEvent::GetType () const
69*30fdc8d8SChris Lattner {
70*30fdc8d8SChris Lattner     const Event *lldb_event = SBEvent::GetLLDBObjectPtr();
71*30fdc8d8SChris Lattner     if (lldb_event)
72*30fdc8d8SChris Lattner         return lldb_event->GetType();
73*30fdc8d8SChris Lattner     return 0;
74*30fdc8d8SChris Lattner }
75*30fdc8d8SChris Lattner 
76*30fdc8d8SChris Lattner SBBroadcaster
77*30fdc8d8SChris Lattner SBEvent::GetBroadcaster () const
78*30fdc8d8SChris Lattner {
79*30fdc8d8SChris Lattner     SBBroadcaster broadcaster;
80*30fdc8d8SChris Lattner     const Event *lldb_event = SBEvent::GetLLDBObjectPtr();
81*30fdc8d8SChris Lattner     if (lldb_event)
82*30fdc8d8SChris Lattner         broadcaster.SetLLDBObjectPtr (lldb_event->GetBroadcaster(), false);
83*30fdc8d8SChris Lattner     return broadcaster;
84*30fdc8d8SChris Lattner }
85*30fdc8d8SChris Lattner 
86*30fdc8d8SChris Lattner bool
87*30fdc8d8SChris Lattner SBEvent::BroadcasterMatchesPtr (const SBBroadcaster *broadcaster)
88*30fdc8d8SChris Lattner {
89*30fdc8d8SChris Lattner     if (broadcaster)
90*30fdc8d8SChris Lattner     {
91*30fdc8d8SChris Lattner         Event *lldb_event = SBEvent::GetLLDBObjectPtr();
92*30fdc8d8SChris Lattner         if (lldb_event)
93*30fdc8d8SChris Lattner             return lldb_event->BroadcasterIs (broadcaster->GetLLDBObjectPtr ());
94*30fdc8d8SChris Lattner     }
95*30fdc8d8SChris Lattner     return false;
96*30fdc8d8SChris Lattner }
97*30fdc8d8SChris Lattner 
98*30fdc8d8SChris Lattner bool
99*30fdc8d8SChris Lattner SBEvent::BroadcasterMatchesRef (const SBBroadcaster &broadcaster)
100*30fdc8d8SChris Lattner {
101*30fdc8d8SChris Lattner     Event *lldb_event = SBEvent::GetLLDBObjectPtr();
102*30fdc8d8SChris Lattner     if (lldb_event)
103*30fdc8d8SChris Lattner         return lldb_event->BroadcasterIs (broadcaster.GetLLDBObjectPtr ());
104*30fdc8d8SChris Lattner     return false;
105*30fdc8d8SChris Lattner }
106*30fdc8d8SChris Lattner 
107*30fdc8d8SChris Lattner void
108*30fdc8d8SChris Lattner SBEvent::Clear()
109*30fdc8d8SChris Lattner {
110*30fdc8d8SChris Lattner     Event *lldb_event = SBEvent::GetLLDBObjectPtr();
111*30fdc8d8SChris Lattner     if (lldb_event)
112*30fdc8d8SChris Lattner         lldb_event->Clear();
113*30fdc8d8SChris Lattner }
114*30fdc8d8SChris Lattner 
115*30fdc8d8SChris Lattner EventSP &
116*30fdc8d8SChris Lattner SBEvent::GetSharedPtr () const
117*30fdc8d8SChris Lattner {
118*30fdc8d8SChris Lattner     return m_event_sp;
119*30fdc8d8SChris Lattner }
120*30fdc8d8SChris Lattner 
121*30fdc8d8SChris Lattner Event *
122*30fdc8d8SChris Lattner SBEvent::GetLLDBObjectPtr ()
123*30fdc8d8SChris Lattner {
124*30fdc8d8SChris Lattner     // There is a dangerous accessor call GetSharedPtr which can be used, so if
125*30fdc8d8SChris Lattner     // we have anything valid in m_event_sp, we must use that since if it gets
126*30fdc8d8SChris Lattner     // used by a function that puts something in there, then it won't update
127*30fdc8d8SChris Lattner     // m_lldb_object...
128*30fdc8d8SChris Lattner     if (m_event_sp)
129*30fdc8d8SChris Lattner         m_lldb_object = m_event_sp.get();
130*30fdc8d8SChris Lattner 
131*30fdc8d8SChris Lattner     return m_lldb_object;
132*30fdc8d8SChris Lattner }
133*30fdc8d8SChris Lattner 
134*30fdc8d8SChris Lattner const Event *
135*30fdc8d8SChris Lattner SBEvent::GetLLDBObjectPtr () const
136*30fdc8d8SChris Lattner {
137*30fdc8d8SChris Lattner     // There is a dangerous accessor call GetSharedPtr which can be used, so if
138*30fdc8d8SChris Lattner     // we have anything valid in m_event_sp, we must use that since if it gets
139*30fdc8d8SChris Lattner     // used by a function that puts something in there, then it won't update
140*30fdc8d8SChris Lattner     // m_lldb_object...
141*30fdc8d8SChris Lattner     if (m_event_sp)
142*30fdc8d8SChris Lattner         m_lldb_object = m_event_sp.get();
143*30fdc8d8SChris Lattner 
144*30fdc8d8SChris Lattner     return m_lldb_object;
145*30fdc8d8SChris Lattner }
146*30fdc8d8SChris Lattner 
147*30fdc8d8SChris Lattner void
148*30fdc8d8SChris Lattner SBEvent::SetEventSP (EventSP &event_sp)
149*30fdc8d8SChris Lattner {
150*30fdc8d8SChris Lattner     m_event_sp = event_sp;
151*30fdc8d8SChris Lattner     m_lldb_object = m_event_sp.get();
152*30fdc8d8SChris Lattner }
153*30fdc8d8SChris Lattner 
154*30fdc8d8SChris Lattner void
155*30fdc8d8SChris Lattner SBEvent::SetLLDBObjectPtr (Event* event_ptr)
156*30fdc8d8SChris Lattner {
157*30fdc8d8SChris Lattner     m_lldb_object = event_ptr;
158*30fdc8d8SChris Lattner     m_event_sp.reset();
159*30fdc8d8SChris Lattner }
160*30fdc8d8SChris Lattner 
161*30fdc8d8SChris Lattner bool
162*30fdc8d8SChris Lattner SBEvent::IsValid() const
163*30fdc8d8SChris Lattner {
164*30fdc8d8SChris Lattner     // Do NOT use m_lldb_object directly!!! Must use the SBEvent::GetLLDBObjectPtr()
165*30fdc8d8SChris Lattner     // accessor. See comments in SBEvent::GetLLDBObjectPtr()....
166*30fdc8d8SChris Lattner     return SBEvent::GetLLDBObjectPtr() != NULL;
167*30fdc8d8SChris Lattner 
168*30fdc8d8SChris Lattner }
169*30fdc8d8SChris Lattner 
170*30fdc8d8SChris Lattner const char *
171*30fdc8d8SChris Lattner SBEvent::GetCStringFromEvent (const SBEvent &event)
172*30fdc8d8SChris Lattner {
173*30fdc8d8SChris Lattner     return reinterpret_cast<const char *>(EventDataBytes::GetBytesFromEvent (event.GetLLDBObjectPtr()));
174*30fdc8d8SChris Lattner }
175*30fdc8d8SChris Lattner 
176*30fdc8d8SChris Lattner 
177