blob: a976c42037a33d9b67fe373bd6551f8a2294f167 [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{
30}
31
32SBEvent::SBEvent (uint32_t event_type, const char *cstr, uint32_t cstr_len) :
33 m_event_sp (new Event (event_type, new EventDataBytes (cstr, cstr_len))),
Greg Clayton63094e02010-06-23 01:19:29 +000034 m_opaque (m_event_sp.get())
Chris Lattner24943d22010-06-08 16:52:24 +000035{
36}
37
38SBEvent::SBEvent (EventSP &event_sp) :
39 m_event_sp (event_sp),
Greg Clayton63094e02010-06-23 01:19:29 +000040 m_opaque (event_sp.get())
Chris Lattner24943d22010-06-08 16:52:24 +000041{
42}
43
44SBEvent::~SBEvent()
45{
46}
47
Chris Lattner24943d22010-06-08 16:52:24 +000048const char *
49SBEvent::GetDataFlavor ()
50{
Greg Clayton63094e02010-06-23 01:19:29 +000051 Event *lldb_event = get();
Chris Lattner24943d22010-06-08 16:52:24 +000052 if (lldb_event)
53 return lldb_event->GetData()->GetFlavor().AsCString();
54 return NULL;
55}
56
57uint32_t
58SBEvent::GetType () const
59{
Caroline Tice7826c882010-10-26 03:11:13 +000060 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
61
Greg Clayton63094e02010-06-23 01:19:29 +000062 const Event *lldb_event = get();
Caroline Tice7826c882010-10-26 03:11:13 +000063 uint32_t event_type = 0;
Chris Lattner24943d22010-06-08 16:52:24 +000064 if (lldb_event)
Caroline Tice7826c882010-10-26 03:11:13 +000065 event_type = lldb_event->GetType();
66
67 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +000068 {
69 StreamString sstr;
70 if (lldb_event && lldb_event->GetBroadcaster() && lldb_event->GetBroadcaster()->GetEventNames(sstr, event_type, true))
71 log->Printf ("SBEvent(%p)::GetType () => 0x%8.8x (%s)", get(), event_type, sstr.GetData());
72 else
73 log->Printf ("SBEvent(%p)::GetType () => 0x%8.8x", get(), event_type);
74
75 }
Caroline Tice7826c882010-10-26 03:11:13 +000076
77 return event_type;
Chris Lattner24943d22010-06-08 16:52:24 +000078}
79
80SBBroadcaster
81SBEvent::GetBroadcaster () const
82{
83 SBBroadcaster broadcaster;
Greg Clayton63094e02010-06-23 01:19:29 +000084 const Event *lldb_event = get();
Chris Lattner24943d22010-06-08 16:52:24 +000085 if (lldb_event)
Greg Clayton63094e02010-06-23 01:19:29 +000086 broadcaster.reset (lldb_event->GetBroadcaster(), false);
Chris Lattner24943d22010-06-08 16:52:24 +000087 return broadcaster;
88}
89
90bool
91SBEvent::BroadcasterMatchesPtr (const SBBroadcaster *broadcaster)
92{
93 if (broadcaster)
Greg Clayton49ce6822010-10-31 03:01:06 +000094 return BroadcasterMatchesRef (*broadcaster);
Chris Lattner24943d22010-06-08 16:52:24 +000095 return false;
96}
97
98bool
99SBEvent::BroadcasterMatchesRef (const SBBroadcaster &broadcaster)
100{
Caroline Tice7826c882010-10-26 03:11:13 +0000101
Greg Clayton63094e02010-06-23 01:19:29 +0000102 Event *lldb_event = get();
Caroline Tice7826c882010-10-26 03:11:13 +0000103 bool success = false;
Chris Lattner24943d22010-06-08 16:52:24 +0000104 if (lldb_event)
Caroline Tice7826c882010-10-26 03:11:13 +0000105 success = lldb_event->BroadcasterIs (broadcaster.get());
106
Greg Clayton49ce6822010-10-31 03:01:06 +0000107 // For logging, this gets a little chatty so only enable this when verbose logging is on
108 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API | LIBLLDB_LOG_VERBOSE);
Caroline Tice7826c882010-10-26 03:11:13 +0000109 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000110 log->Printf ("SBEvent(%p)::BroadcasterMatchesRef (SBBroadcaster(%p): %s) => %i",
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000111 get(),
112 broadcaster.get(),
Greg Clayton49ce6822010-10-31 03:01:06 +0000113 broadcaster.GetName(),
Greg Claytona66ba462010-10-30 04:51:46 +0000114 success);
Caroline Tice7826c882010-10-26 03:11:13 +0000115
116 return success;
Chris Lattner24943d22010-06-08 16:52:24 +0000117}
118
119void
120SBEvent::Clear()
121{
Greg Clayton63094e02010-06-23 01:19:29 +0000122 Event *lldb_event = get();
Chris Lattner24943d22010-06-08 16:52:24 +0000123 if (lldb_event)
124 lldb_event->Clear();
125}
126
127EventSP &
Greg Clayton63094e02010-06-23 01:19:29 +0000128SBEvent::GetSP () const
Chris Lattner24943d22010-06-08 16:52:24 +0000129{
130 return m_event_sp;
131}
132
133Event *
Greg Clayton63094e02010-06-23 01:19:29 +0000134SBEvent::get() const
Chris Lattner24943d22010-06-08 16:52:24 +0000135{
136 // There is a dangerous accessor call GetSharedPtr which can be used, so if
137 // we have anything valid in m_event_sp, we must use that since if it gets
138 // used by a function that puts something in there, then it won't update
Greg Clayton63094e02010-06-23 01:19:29 +0000139 // m_opaque...
Chris Lattner24943d22010-06-08 16:52:24 +0000140 if (m_event_sp)
Greg Clayton63094e02010-06-23 01:19:29 +0000141 m_opaque = m_event_sp.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000142
Greg Clayton63094e02010-06-23 01:19:29 +0000143 return m_opaque;
Chris Lattner24943d22010-06-08 16:52:24 +0000144}
145
146void
Greg Clayton63094e02010-06-23 01:19:29 +0000147SBEvent::reset (EventSP &event_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000148{
149 m_event_sp = event_sp;
Greg Clayton63094e02010-06-23 01:19:29 +0000150 m_opaque = m_event_sp.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000151}
152
153void
Greg Clayton63094e02010-06-23 01:19:29 +0000154SBEvent::reset (Event* event_ptr)
Chris Lattner24943d22010-06-08 16:52:24 +0000155{
Greg Clayton63094e02010-06-23 01:19:29 +0000156 m_opaque = event_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +0000157 m_event_sp.reset();
158}
159
160bool
161SBEvent::IsValid() const
162{
Greg Clayton63094e02010-06-23 01:19:29 +0000163 // Do NOT use m_opaque directly!!! Must use the SBEvent::get()
164 // accessor. See comments in SBEvent::get()....
165 return SBEvent::get() != NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000166
167}
168
169const char *
170SBEvent::GetCStringFromEvent (const SBEvent &event)
171{
Caroline Tice7826c882010-10-26 03:11:13 +0000172 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
173
174 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000175 log->Printf ("SBEvent(%p)::GetCStringFromEvent () => \"%s\"",
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000176 event.get(),
Caroline Tice7826c882010-10-26 03:11:13 +0000177 reinterpret_cast<const char *>(EventDataBytes::GetBytesFromEvent (event.get())));
178
Greg Clayton63094e02010-06-23 01:19:29 +0000179 return reinterpret_cast<const char *>(EventDataBytes::GetBytesFromEvent (event.get()));
Chris Lattner24943d22010-06-08 16:52:24 +0000180}
181
182
Caroline Tice98f930f2010-09-20 05:20:02 +0000183bool
184SBEvent::GetDescription (SBStream &description)
185{
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000186 if (get())
Caroline Ticee7a566e2010-09-20 16:21:41 +0000187 {
Caroline Ticee49ec182010-09-22 23:01:29 +0000188 description.ref();
Caroline Tice98f930f2010-09-20 05:20:02 +0000189 m_opaque->Dump (description.get());
Caroline Ticee7a566e2010-09-20 16:21:41 +0000190 }
Caroline Tice98f930f2010-09-20 05:20:02 +0000191 else
Caroline Ticee7a566e2010-09-20 16:21:41 +0000192 description.Printf ("No value");
Caroline Tice98f930f2010-09-20 05:20:02 +0000193
194 return true;
195}
Caroline Tice7826c882010-10-26 03:11:13 +0000196
197bool
198SBEvent::GetDescription (SBStream &description) const
199{
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000200 if (get())
Caroline Tice7826c882010-10-26 03:11:13 +0000201 {
202 description.ref();
203 m_opaque->Dump (description.get());
204 }
205 else
206 description.Printf ("No value");
207
208 return true;
209}