blob: 543383b1ade5a57bf21ac99b518f33dd9e696a51 [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"
Chris Lattner24943d22010-06-08 16:52:24 +000012
13#include "lldb/Core/Event.h"
14#include "lldb/Core/Stream.h"
15#include "lldb/Core/StreamFile.h"
16#include "lldb/Core/ConstString.h"
17#include "lldb/Target/Process.h"
18#include "lldb/Breakpoint/Breakpoint.h"
19#include "lldb/Interpreter/CommandInterpreter.h"
20
21using namespace lldb;
22using namespace lldb_private;
23
24
25SBEvent::SBEvent () :
26 m_event_sp (),
Greg Clayton63094e02010-06-23 01:19:29 +000027 m_opaque (NULL)
Chris Lattner24943d22010-06-08 16:52:24 +000028{
29}
30
31SBEvent::SBEvent (uint32_t event_type, const char *cstr, uint32_t cstr_len) :
32 m_event_sp (new Event (event_type, new EventDataBytes (cstr, cstr_len))),
Greg Clayton63094e02010-06-23 01:19:29 +000033 m_opaque (m_event_sp.get())
Chris Lattner24943d22010-06-08 16:52:24 +000034{
35}
36
37SBEvent::SBEvent (EventSP &event_sp) :
38 m_event_sp (event_sp),
Greg Clayton63094e02010-06-23 01:19:29 +000039 m_opaque (event_sp.get())
Chris Lattner24943d22010-06-08 16:52:24 +000040{
41}
42
43SBEvent::~SBEvent()
44{
45}
46
Chris Lattner24943d22010-06-08 16:52:24 +000047const char *
48SBEvent::GetDataFlavor ()
49{
Greg Clayton63094e02010-06-23 01:19:29 +000050 Event *lldb_event = get();
Chris Lattner24943d22010-06-08 16:52:24 +000051 if (lldb_event)
52 return lldb_event->GetData()->GetFlavor().AsCString();
53 return NULL;
54}
55
56uint32_t
57SBEvent::GetType () const
58{
Greg Clayton63094e02010-06-23 01:19:29 +000059 const Event *lldb_event = get();
Chris Lattner24943d22010-06-08 16:52:24 +000060 if (lldb_event)
61 return lldb_event->GetType();
62 return 0;
63}
64
65SBBroadcaster
66SBEvent::GetBroadcaster () const
67{
68 SBBroadcaster broadcaster;
Greg Clayton63094e02010-06-23 01:19:29 +000069 const Event *lldb_event = get();
Chris Lattner24943d22010-06-08 16:52:24 +000070 if (lldb_event)
Greg Clayton63094e02010-06-23 01:19:29 +000071 broadcaster.reset (lldb_event->GetBroadcaster(), false);
Chris Lattner24943d22010-06-08 16:52:24 +000072 return broadcaster;
73}
74
75bool
76SBEvent::BroadcasterMatchesPtr (const SBBroadcaster *broadcaster)
77{
78 if (broadcaster)
79 {
Greg Clayton63094e02010-06-23 01:19:29 +000080 Event *lldb_event = get();
Chris Lattner24943d22010-06-08 16:52:24 +000081 if (lldb_event)
Greg Clayton63094e02010-06-23 01:19:29 +000082 return lldb_event->BroadcasterIs (broadcaster->get());
Chris Lattner24943d22010-06-08 16:52:24 +000083 }
84 return false;
85}
86
87bool
88SBEvent::BroadcasterMatchesRef (const SBBroadcaster &broadcaster)
89{
Greg Clayton63094e02010-06-23 01:19:29 +000090 Event *lldb_event = get();
Chris Lattner24943d22010-06-08 16:52:24 +000091 if (lldb_event)
Greg Clayton63094e02010-06-23 01:19:29 +000092 return lldb_event->BroadcasterIs (broadcaster.get());
Chris Lattner24943d22010-06-08 16:52:24 +000093 return false;
94}
95
96void
97SBEvent::Clear()
98{
Greg Clayton63094e02010-06-23 01:19:29 +000099 Event *lldb_event = get();
Chris Lattner24943d22010-06-08 16:52:24 +0000100 if (lldb_event)
101 lldb_event->Clear();
102}
103
104EventSP &
Greg Clayton63094e02010-06-23 01:19:29 +0000105SBEvent::GetSP () const
Chris Lattner24943d22010-06-08 16:52:24 +0000106{
107 return m_event_sp;
108}
109
110Event *
Greg Clayton63094e02010-06-23 01:19:29 +0000111SBEvent::get() const
Chris Lattner24943d22010-06-08 16:52:24 +0000112{
113 // There is a dangerous accessor call GetSharedPtr which can be used, so if
114 // we have anything valid in m_event_sp, we must use that since if it gets
115 // used by a function that puts something in there, then it won't update
Greg Clayton63094e02010-06-23 01:19:29 +0000116 // m_opaque...
Chris Lattner24943d22010-06-08 16:52:24 +0000117 if (m_event_sp)
Greg Clayton63094e02010-06-23 01:19:29 +0000118 m_opaque = m_event_sp.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000119
Greg Clayton63094e02010-06-23 01:19:29 +0000120 return m_opaque;
Chris Lattner24943d22010-06-08 16:52:24 +0000121}
122
123void
Greg Clayton63094e02010-06-23 01:19:29 +0000124SBEvent::reset (EventSP &event_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000125{
126 m_event_sp = event_sp;
Greg Clayton63094e02010-06-23 01:19:29 +0000127 m_opaque = m_event_sp.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000128}
129
130void
Greg Clayton63094e02010-06-23 01:19:29 +0000131SBEvent::reset (Event* event_ptr)
Chris Lattner24943d22010-06-08 16:52:24 +0000132{
Greg Clayton63094e02010-06-23 01:19:29 +0000133 m_opaque = event_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +0000134 m_event_sp.reset();
135}
136
137bool
138SBEvent::IsValid() const
139{
Greg Clayton63094e02010-06-23 01:19:29 +0000140 // Do NOT use m_opaque directly!!! Must use the SBEvent::get()
141 // accessor. See comments in SBEvent::get()....
142 return SBEvent::get() != NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000143
144}
145
146const char *
147SBEvent::GetCStringFromEvent (const SBEvent &event)
148{
Greg Clayton63094e02010-06-23 01:19:29 +0000149 return reinterpret_cast<const char *>(EventDataBytes::GetBytesFromEvent (event.get()));
Chris Lattner24943d22010-06-08 16:52:24 +0000150}
151
152