blob: c69957ebefc4aab21b27a7acf63111bf6b6ae7a0 [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
10#include "SBEvent.h"
11#include "SBBroadcaster.h"
12
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 (),
27 m_lldb_object (NULL)
28{
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))),
33 m_lldb_object (m_event_sp.get())
34{
35}
36
37SBEvent::SBEvent (EventSP &event_sp) :
38 m_event_sp (event_sp),
39 m_lldb_object (event_sp.get())
40{
41}
42
43SBEvent::~SBEvent()
44{
45}
46
47void
48SBEvent::Dump (FILE *f) const
49{
50 const Event *lldb_event = GetLLDBObjectPtr();
51 if (lldb_event)
52 {
53 StreamFile str(f);
54 lldb_event->Dump ((Stream *) &str);
55 }
56}
57
58const char *
59SBEvent::GetDataFlavor ()
60{
61 Event *lldb_event = SBEvent::GetLLDBObjectPtr();
62 if (lldb_event)
63 return lldb_event->GetData()->GetFlavor().AsCString();
64 return NULL;
65}
66
67uint32_t
68SBEvent::GetType () const
69{
70 const Event *lldb_event = SBEvent::GetLLDBObjectPtr();
71 if (lldb_event)
72 return lldb_event->GetType();
73 return 0;
74}
75
76SBBroadcaster
77SBEvent::GetBroadcaster () const
78{
79 SBBroadcaster broadcaster;
80 const Event *lldb_event = SBEvent::GetLLDBObjectPtr();
81 if (lldb_event)
82 broadcaster.SetLLDBObjectPtr (lldb_event->GetBroadcaster(), false);
83 return broadcaster;
84}
85
86bool
87SBEvent::BroadcasterMatchesPtr (const SBBroadcaster *broadcaster)
88{
89 if (broadcaster)
90 {
91 Event *lldb_event = SBEvent::GetLLDBObjectPtr();
92 if (lldb_event)
93 return lldb_event->BroadcasterIs (broadcaster->GetLLDBObjectPtr ());
94 }
95 return false;
96}
97
98bool
99SBEvent::BroadcasterMatchesRef (const SBBroadcaster &broadcaster)
100{
101 Event *lldb_event = SBEvent::GetLLDBObjectPtr();
102 if (lldb_event)
103 return lldb_event->BroadcasterIs (broadcaster.GetLLDBObjectPtr ());
104 return false;
105}
106
107void
108SBEvent::Clear()
109{
110 Event *lldb_event = SBEvent::GetLLDBObjectPtr();
111 if (lldb_event)
112 lldb_event->Clear();
113}
114
115EventSP &
116SBEvent::GetSharedPtr () const
117{
118 return m_event_sp;
119}
120
121Event *
122SBEvent::GetLLDBObjectPtr ()
123{
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
127 // m_lldb_object...
128 if (m_event_sp)
129 m_lldb_object = m_event_sp.get();
130
131 return m_lldb_object;
132}
133
134const Event *
135SBEvent::GetLLDBObjectPtr () const
136{
137 // There is a dangerous accessor call GetSharedPtr which can be used, so if
138 // we have anything valid in m_event_sp, we must use that since if it gets
139 // used by a function that puts something in there, then it won't update
140 // m_lldb_object...
141 if (m_event_sp)
142 m_lldb_object = m_event_sp.get();
143
144 return m_lldb_object;
145}
146
147void
148SBEvent::SetEventSP (EventSP &event_sp)
149{
150 m_event_sp = event_sp;
151 m_lldb_object = m_event_sp.get();
152}
153
154void
155SBEvent::SetLLDBObjectPtr (Event* event_ptr)
156{
157 m_lldb_object = event_ptr;
158 m_event_sp.reset();
159}
160
161bool
162SBEvent::IsValid() const
163{
164 // Do NOT use m_lldb_object directly!!! Must use the SBEvent::GetLLDBObjectPtr()
165 // accessor. See comments in SBEvent::GetLLDBObjectPtr()....
166 return SBEvent::GetLLDBObjectPtr() != NULL;
167
168}
169
170const char *
171SBEvent::GetCStringFromEvent (const SBEvent &event)
172{
173 return reinterpret_cast<const char *>(EventDataBytes::GetBytesFromEvent (event.GetLLDBObjectPtr()));
174}
175
176