blob: 70a4277a1b09a004acf14b0a24d0493937517b64 [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001//===-- SBEvent.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
Eli Friedman7a62c8b2010-06-09 07:44:37 +000010#include "lldb/API/SBEvent.h"
11#include "lldb/API/SBBroadcaster.h"
Caroline Tice98f930f2010-09-20 05:20:02 +000012#include "lldb/API/SBStream.h"
Chris Lattner24943d22010-06-08 16:52:24 +000013
14#include "lldb/Core/Event.h"
15#include "lldb/Core/Stream.h"
16#include "lldb/Core/StreamFile.h"
17#include "lldb/Core/ConstString.h"
18#include "lldb/Target/Process.h"
19#include "lldb/Breakpoint/Breakpoint.h"
20#include "lldb/Interpreter/CommandInterpreter.h"
21
22using namespace lldb;
23using namespace lldb_private;
24
25
26SBEvent::SBEvent () :
27 m_event_sp (),
Greg Clayton63094e02010-06-23 01:19:29 +000028 m_opaque (NULL)
Chris Lattner24943d22010-06-08 16:52:24 +000029{
Caroline Tice7826c882010-10-26 03:11:13 +000030 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API | LIBLLDB_LOG_VERBOSE);
31
32 if (log)
33 log->Printf ("SBEvent::SBEvent () ==> this = %p", this);
Chris Lattner24943d22010-06-08 16:52:24 +000034}
35
36SBEvent::SBEvent (uint32_t event_type, const char *cstr, uint32_t cstr_len) :
37 m_event_sp (new Event (event_type, new EventDataBytes (cstr, cstr_len))),
Greg Clayton63094e02010-06-23 01:19:29 +000038 m_opaque (m_event_sp.get())
Chris Lattner24943d22010-06-08 16:52:24 +000039{
Caroline Tice7826c882010-10-26 03:11:13 +000040 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API | LIBLLDB_LOG_VERBOSE);
41
42 if (log)
43 {
44 log->Printf ("SBEvent::SBEvent (uint32_t event_type, const char *cstr, uint32_t cstr_len)");
45 log->Printf (" event_type = %d, cstr = '%s', cstr_len = %d ==> this = %p (m_opaque = %p)", event_type,
46 cstr, cstr_len, this, m_opaque);
47 }
Chris Lattner24943d22010-06-08 16:52:24 +000048}
49
50SBEvent::SBEvent (EventSP &event_sp) :
51 m_event_sp (event_sp),
Greg Clayton63094e02010-06-23 01:19:29 +000052 m_opaque (event_sp.get())
Chris Lattner24943d22010-06-08 16:52:24 +000053{
Caroline Tice7826c882010-10-26 03:11:13 +000054 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API | LIBLLDB_LOG_VERBOSE);
55
56 if (log)
57 log->Printf ("SBEvent::SBEvent (EventSP &event_sp) event_sp.get() = %p ==> this = %p", event_sp.get(), this);
Chris Lattner24943d22010-06-08 16:52:24 +000058}
59
60SBEvent::~SBEvent()
61{
62}
63
Chris Lattner24943d22010-06-08 16:52:24 +000064const char *
65SBEvent::GetDataFlavor ()
66{
Greg Clayton63094e02010-06-23 01:19:29 +000067 Event *lldb_event = get();
Chris Lattner24943d22010-06-08 16:52:24 +000068 if (lldb_event)
69 return lldb_event->GetData()->GetFlavor().AsCString();
70 return NULL;
71}
72
73uint32_t
74SBEvent::GetType () const
75{
Caroline Tice7826c882010-10-26 03:11:13 +000076 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
77
78 if (log)
79 log->Printf ("SBEvent::GetType ()");
80
Greg Clayton63094e02010-06-23 01:19:29 +000081 const Event *lldb_event = get();
Caroline Tice7826c882010-10-26 03:11:13 +000082 uint32_t event_type = 0;
Chris Lattner24943d22010-06-08 16:52:24 +000083 if (lldb_event)
Caroline Tice7826c882010-10-26 03:11:13 +000084 event_type = lldb_event->GetType();
85
86 if (log)
87 log->Printf ("SBEvent::GetType ==> %d", event_type);
88
89 return event_type;
Chris Lattner24943d22010-06-08 16:52:24 +000090}
91
92SBBroadcaster
93SBEvent::GetBroadcaster () const
94{
95 SBBroadcaster broadcaster;
Greg Clayton63094e02010-06-23 01:19:29 +000096 const Event *lldb_event = get();
Chris Lattner24943d22010-06-08 16:52:24 +000097 if (lldb_event)
Greg Clayton63094e02010-06-23 01:19:29 +000098 broadcaster.reset (lldb_event->GetBroadcaster(), false);
Chris Lattner24943d22010-06-08 16:52:24 +000099 return broadcaster;
100}
101
102bool
103SBEvent::BroadcasterMatchesPtr (const SBBroadcaster *broadcaster)
104{
105 if (broadcaster)
106 {
Greg Clayton63094e02010-06-23 01:19:29 +0000107 Event *lldb_event = get();
Chris Lattner24943d22010-06-08 16:52:24 +0000108 if (lldb_event)
Greg Clayton63094e02010-06-23 01:19:29 +0000109 return lldb_event->BroadcasterIs (broadcaster->get());
Chris Lattner24943d22010-06-08 16:52:24 +0000110 }
111 return false;
112}
113
114bool
115SBEvent::BroadcasterMatchesRef (const SBBroadcaster &broadcaster)
116{
Caroline Tice7826c882010-10-26 03:11:13 +0000117 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
118
119 if (log)
120 log->Printf ("SBEvent::BroadcasterMatchesRef (broacaster) broadcaster = %p", &broadcaster);
121
Greg Clayton63094e02010-06-23 01:19:29 +0000122 Event *lldb_event = get();
Caroline Tice7826c882010-10-26 03:11:13 +0000123 bool success = false;
Chris Lattner24943d22010-06-08 16:52:24 +0000124 if (lldb_event)
Caroline Tice7826c882010-10-26 03:11:13 +0000125 success = lldb_event->BroadcasterIs (broadcaster.get());
126
127 if (log)
128 log->Printf ("SBEvent::BroadcasterMathesRef ==> %s", (success ? "true" : "false"));
129
130 return success;
Chris Lattner24943d22010-06-08 16:52:24 +0000131}
132
133void
134SBEvent::Clear()
135{
Greg Clayton63094e02010-06-23 01:19:29 +0000136 Event *lldb_event = get();
Chris Lattner24943d22010-06-08 16:52:24 +0000137 if (lldb_event)
138 lldb_event->Clear();
139}
140
141EventSP &
Greg Clayton63094e02010-06-23 01:19:29 +0000142SBEvent::GetSP () const
Chris Lattner24943d22010-06-08 16:52:24 +0000143{
144 return m_event_sp;
145}
146
147Event *
Greg Clayton63094e02010-06-23 01:19:29 +0000148SBEvent::get() const
Chris Lattner24943d22010-06-08 16:52:24 +0000149{
150 // There is a dangerous accessor call GetSharedPtr which can be used, so if
151 // we have anything valid in m_event_sp, we must use that since if it gets
152 // used by a function that puts something in there, then it won't update
Greg Clayton63094e02010-06-23 01:19:29 +0000153 // m_opaque...
Chris Lattner24943d22010-06-08 16:52:24 +0000154 if (m_event_sp)
Greg Clayton63094e02010-06-23 01:19:29 +0000155 m_opaque = m_event_sp.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000156
Greg Clayton63094e02010-06-23 01:19:29 +0000157 return m_opaque;
Chris Lattner24943d22010-06-08 16:52:24 +0000158}
159
160void
Greg Clayton63094e02010-06-23 01:19:29 +0000161SBEvent::reset (EventSP &event_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000162{
163 m_event_sp = event_sp;
Greg Clayton63094e02010-06-23 01:19:29 +0000164 m_opaque = m_event_sp.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000165}
166
167void
Greg Clayton63094e02010-06-23 01:19:29 +0000168SBEvent::reset (Event* event_ptr)
Chris Lattner24943d22010-06-08 16:52:24 +0000169{
Greg Clayton63094e02010-06-23 01:19:29 +0000170 m_opaque = event_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +0000171 m_event_sp.reset();
172}
173
174bool
175SBEvent::IsValid() const
176{
Greg Clayton63094e02010-06-23 01:19:29 +0000177 // Do NOT use m_opaque directly!!! Must use the SBEvent::get()
178 // accessor. See comments in SBEvent::get()....
179 return SBEvent::get() != NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000180
181}
182
183const char *
184SBEvent::GetCStringFromEvent (const SBEvent &event)
185{
Caroline Tice7826c882010-10-26 03:11:13 +0000186 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
187
188 if (log)
189 log->Printf ("GetCStringFromEvent ==> %s",
190 reinterpret_cast<const char *>(EventDataBytes::GetBytesFromEvent (event.get())));
191
Greg Clayton63094e02010-06-23 01:19:29 +0000192 return reinterpret_cast<const char *>(EventDataBytes::GetBytesFromEvent (event.get()));
Chris Lattner24943d22010-06-08 16:52:24 +0000193}
194
195
Caroline Tice98f930f2010-09-20 05:20:02 +0000196bool
197SBEvent::GetDescription (SBStream &description)
198{
199 if (m_opaque)
Caroline Ticee7a566e2010-09-20 16:21:41 +0000200 {
Caroline Ticee49ec182010-09-22 23:01:29 +0000201 description.ref();
Caroline Tice98f930f2010-09-20 05:20:02 +0000202 m_opaque->Dump (description.get());
Caroline Ticee7a566e2010-09-20 16:21:41 +0000203 }
Caroline Tice98f930f2010-09-20 05:20:02 +0000204 else
Caroline Ticee7a566e2010-09-20 16:21:41 +0000205 description.Printf ("No value");
Caroline Tice98f930f2010-09-20 05:20:02 +0000206
207 return true;
208}
Caroline Tice7826c882010-10-26 03:11:13 +0000209
210bool
211SBEvent::GetDescription (SBStream &description) const
212{
213 if (m_opaque)
214 {
215 description.ref();
216 m_opaque->Dump (description.get());
217 }
218 else
219 description.Printf ("No value");
220
221 return true;
222}