blob: 0799b8bad57a2d9f87d0551d3d790215e46eb93f [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{
Greg Clayton63094e02010-06-23 01:19:29 +000060 const Event *lldb_event = get();
Chris Lattner24943d22010-06-08 16:52:24 +000061 if (lldb_event)
62 return lldb_event->GetType();
63 return 0;
64}
65
66SBBroadcaster
67SBEvent::GetBroadcaster () const
68{
69 SBBroadcaster broadcaster;
Greg Clayton63094e02010-06-23 01:19:29 +000070 const Event *lldb_event = get();
Chris Lattner24943d22010-06-08 16:52:24 +000071 if (lldb_event)
Greg Clayton63094e02010-06-23 01:19:29 +000072 broadcaster.reset (lldb_event->GetBroadcaster(), false);
Chris Lattner24943d22010-06-08 16:52:24 +000073 return broadcaster;
74}
75
76bool
77SBEvent::BroadcasterMatchesPtr (const SBBroadcaster *broadcaster)
78{
79 if (broadcaster)
80 {
Greg Clayton63094e02010-06-23 01:19:29 +000081 Event *lldb_event = get();
Chris Lattner24943d22010-06-08 16:52:24 +000082 if (lldb_event)
Greg Clayton63094e02010-06-23 01:19:29 +000083 return lldb_event->BroadcasterIs (broadcaster->get());
Chris Lattner24943d22010-06-08 16:52:24 +000084 }
85 return false;
86}
87
88bool
89SBEvent::BroadcasterMatchesRef (const SBBroadcaster &broadcaster)
90{
Greg Clayton63094e02010-06-23 01:19:29 +000091 Event *lldb_event = get();
Chris Lattner24943d22010-06-08 16:52:24 +000092 if (lldb_event)
Greg Clayton63094e02010-06-23 01:19:29 +000093 return lldb_event->BroadcasterIs (broadcaster.get());
Chris Lattner24943d22010-06-08 16:52:24 +000094 return false;
95}
96
97void
98SBEvent::Clear()
99{
Greg Clayton63094e02010-06-23 01:19:29 +0000100 Event *lldb_event = get();
Chris Lattner24943d22010-06-08 16:52:24 +0000101 if (lldb_event)
102 lldb_event->Clear();
103}
104
105EventSP &
Greg Clayton63094e02010-06-23 01:19:29 +0000106SBEvent::GetSP () const
Chris Lattner24943d22010-06-08 16:52:24 +0000107{
108 return m_event_sp;
109}
110
111Event *
Greg Clayton63094e02010-06-23 01:19:29 +0000112SBEvent::get() const
Chris Lattner24943d22010-06-08 16:52:24 +0000113{
114 // There is a dangerous accessor call GetSharedPtr which can be used, so if
115 // we have anything valid in m_event_sp, we must use that since if it gets
116 // used by a function that puts something in there, then it won't update
Greg Clayton63094e02010-06-23 01:19:29 +0000117 // m_opaque...
Chris Lattner24943d22010-06-08 16:52:24 +0000118 if (m_event_sp)
Greg Clayton63094e02010-06-23 01:19:29 +0000119 m_opaque = m_event_sp.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000120
Greg Clayton63094e02010-06-23 01:19:29 +0000121 return m_opaque;
Chris Lattner24943d22010-06-08 16:52:24 +0000122}
123
124void
Greg Clayton63094e02010-06-23 01:19:29 +0000125SBEvent::reset (EventSP &event_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000126{
127 m_event_sp = event_sp;
Greg Clayton63094e02010-06-23 01:19:29 +0000128 m_opaque = m_event_sp.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000129}
130
131void
Greg Clayton63094e02010-06-23 01:19:29 +0000132SBEvent::reset (Event* event_ptr)
Chris Lattner24943d22010-06-08 16:52:24 +0000133{
Greg Clayton63094e02010-06-23 01:19:29 +0000134 m_opaque = event_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +0000135 m_event_sp.reset();
136}
137
138bool
139SBEvent::IsValid() const
140{
Greg Clayton63094e02010-06-23 01:19:29 +0000141 // Do NOT use m_opaque directly!!! Must use the SBEvent::get()
142 // accessor. See comments in SBEvent::get()....
143 return SBEvent::get() != NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000144
145}
146
147const char *
148SBEvent::GetCStringFromEvent (const SBEvent &event)
149{
Greg Clayton63094e02010-06-23 01:19:29 +0000150 return reinterpret_cast<const char *>(EventDataBytes::GetBytesFromEvent (event.get()));
Chris Lattner24943d22010-06-08 16:52:24 +0000151}
152
153
Caroline Tice98f930f2010-09-20 05:20:02 +0000154bool
155SBEvent::GetDescription (SBStream &description)
156{
157 if (m_opaque)
158 {
159 m_opaque->Dump (description.get());
160 }
161 else
162 description.Printf ("No value");
163
164 return true;
165}
166
167PyObject *
168SBEvent::__repr__ ()
169{
170 SBStream description;
171 description.ref();
172 GetDescription (description);
173 return PyString_FromString (description.GetData());
174}