blob: c04ee72d8899fa502f9a2955788216b01176cd9f [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
47void
48SBEvent::Dump (FILE *f) const
49{
Greg Clayton63094e02010-06-23 01:19:29 +000050 const Event *lldb_event = get();
Chris Lattner24943d22010-06-08 16:52:24 +000051 if (lldb_event)
52 {
53 StreamFile str(f);
54 lldb_event->Dump ((Stream *) &str);
55 }
56}
57
58const char *
59SBEvent::GetDataFlavor ()
60{
Greg Clayton63094e02010-06-23 01:19:29 +000061 Event *lldb_event = get();
Chris Lattner24943d22010-06-08 16:52:24 +000062 if (lldb_event)
63 return lldb_event->GetData()->GetFlavor().AsCString();
64 return NULL;
65}
66
67uint32_t
68SBEvent::GetType () const
69{
Greg Clayton63094e02010-06-23 01:19:29 +000070 const Event *lldb_event = get();
Chris Lattner24943d22010-06-08 16:52:24 +000071 if (lldb_event)
72 return lldb_event->GetType();
73 return 0;
74}
75
76SBBroadcaster
77SBEvent::GetBroadcaster () const
78{
79 SBBroadcaster broadcaster;
Greg Clayton63094e02010-06-23 01:19:29 +000080 const Event *lldb_event = get();
Chris Lattner24943d22010-06-08 16:52:24 +000081 if (lldb_event)
Greg Clayton63094e02010-06-23 01:19:29 +000082 broadcaster.reset (lldb_event->GetBroadcaster(), false);
Chris Lattner24943d22010-06-08 16:52:24 +000083 return broadcaster;
84}
85
86bool
87SBEvent::BroadcasterMatchesPtr (const SBBroadcaster *broadcaster)
88{
89 if (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 }
95 return false;
96}
97
98bool
99SBEvent::BroadcasterMatchesRef (const SBBroadcaster &broadcaster)
100{
Greg Clayton63094e02010-06-23 01:19:29 +0000101 Event *lldb_event = get();
Chris Lattner24943d22010-06-08 16:52:24 +0000102 if (lldb_event)
Greg Clayton63094e02010-06-23 01:19:29 +0000103 return lldb_event->BroadcasterIs (broadcaster.get());
Chris Lattner24943d22010-06-08 16:52:24 +0000104 return false;
105}
106
107void
108SBEvent::Clear()
109{
Greg Clayton63094e02010-06-23 01:19:29 +0000110 Event *lldb_event = get();
Chris Lattner24943d22010-06-08 16:52:24 +0000111 if (lldb_event)
112 lldb_event->Clear();
113}
114
115EventSP &
Greg Clayton63094e02010-06-23 01:19:29 +0000116SBEvent::GetSP () const
Chris Lattner24943d22010-06-08 16:52:24 +0000117{
118 return m_event_sp;
119}
120
121Event *
Greg Clayton63094e02010-06-23 01:19:29 +0000122SBEvent::get() const
Chris Lattner24943d22010-06-08 16:52:24 +0000123{
124 // There is a dangerous accessor call GetSharedPtr which can be used, so if
125 // we have anything valid in m_event_sp, we must use that since if it gets
126 // used by a function that puts something in there, then it won't update
Greg Clayton63094e02010-06-23 01:19:29 +0000127 // m_opaque...
Chris Lattner24943d22010-06-08 16:52:24 +0000128 if (m_event_sp)
Greg Clayton63094e02010-06-23 01:19:29 +0000129 m_opaque = m_event_sp.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000130
Greg Clayton63094e02010-06-23 01:19:29 +0000131 return m_opaque;
Chris Lattner24943d22010-06-08 16:52:24 +0000132}
133
134void
Greg Clayton63094e02010-06-23 01:19:29 +0000135SBEvent::reset (EventSP &event_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000136{
137 m_event_sp = event_sp;
Greg Clayton63094e02010-06-23 01:19:29 +0000138 m_opaque = m_event_sp.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000139}
140
141void
Greg Clayton63094e02010-06-23 01:19:29 +0000142SBEvent::reset (Event* event_ptr)
Chris Lattner24943d22010-06-08 16:52:24 +0000143{
Greg Clayton63094e02010-06-23 01:19:29 +0000144 m_opaque = event_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +0000145 m_event_sp.reset();
146}
147
148bool
149SBEvent::IsValid() const
150{
Greg Clayton63094e02010-06-23 01:19:29 +0000151 // Do NOT use m_opaque directly!!! Must use the SBEvent::get()
152 // accessor. See comments in SBEvent::get()....
153 return SBEvent::get() != NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000154
155}
156
157const char *
158SBEvent::GetCStringFromEvent (const SBEvent &event)
159{
Greg Clayton63094e02010-06-23 01:19:29 +0000160 return reinterpret_cast<const char *>(EventDataBytes::GetBytesFromEvent (event.get()));
Chris Lattner24943d22010-06-08 16:52:24 +0000161}
162
163