130fdc8d8SChris Lattner //===-- SBEvent.cpp ---------------------------------------------*- C++ -*-===//
230fdc8d8SChris Lattner //
330fdc8d8SChris Lattner //                     The LLVM Compiler Infrastructure
430fdc8d8SChris Lattner //
530fdc8d8SChris Lattner // This file is distributed under the University of Illinois Open Source
630fdc8d8SChris Lattner // License. See LICENSE.TXT for details.
730fdc8d8SChris Lattner //
830fdc8d8SChris Lattner //===----------------------------------------------------------------------===//
930fdc8d8SChris Lattner 
104c5de699SEli Friedman #include "lldb/API/SBEvent.h"
114c5de699SEli Friedman #include "lldb/API/SBBroadcaster.h"
12dde9cff3SCaroline Tice #include "lldb/API/SBStream.h"
1330fdc8d8SChris Lattner 
1430fdc8d8SChris Lattner #include "lldb/Core/Event.h"
1530fdc8d8SChris Lattner #include "lldb/Core/Stream.h"
1630fdc8d8SChris Lattner #include "lldb/Core/StreamFile.h"
1730fdc8d8SChris Lattner #include "lldb/Core/ConstString.h"
1830fdc8d8SChris Lattner #include "lldb/Target/Process.h"
1930fdc8d8SChris Lattner #include "lldb/Breakpoint/Breakpoint.h"
2030fdc8d8SChris Lattner #include "lldb/Interpreter/CommandInterpreter.h"
2130fdc8d8SChris Lattner 
2230fdc8d8SChris Lattner using namespace lldb;
2330fdc8d8SChris Lattner using namespace lldb_private;
2430fdc8d8SChris Lattner 
2530fdc8d8SChris Lattner 
2630fdc8d8SChris Lattner SBEvent::SBEvent () :
2730fdc8d8SChris Lattner     m_event_sp (),
286611103cSGreg Clayton     m_opaque (NULL)
2930fdc8d8SChris Lattner {
3030fdc8d8SChris Lattner }
3130fdc8d8SChris Lattner 
3230fdc8d8SChris Lattner SBEvent::SBEvent (uint32_t event_type, const char *cstr, uint32_t cstr_len) :
3330fdc8d8SChris Lattner     m_event_sp (new Event (event_type, new EventDataBytes (cstr, cstr_len))),
346611103cSGreg Clayton     m_opaque (m_event_sp.get())
3530fdc8d8SChris Lattner {
36*750cd175SCaroline Tice     Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
37ceb6b139SCaroline Tice 
38ceb6b139SCaroline Tice     if (log)
39ceb6b139SCaroline Tice     {
40*750cd175SCaroline Tice         log->Printf ("SBEvent::SBEvent (event_type=%d, cstr='%s', cstr_len=%d)  => this.sp = %p", event_type,
41*750cd175SCaroline Tice                      cstr, cstr_len, m_opaque);
42ceb6b139SCaroline Tice     }
4330fdc8d8SChris Lattner }
4430fdc8d8SChris Lattner 
4530fdc8d8SChris Lattner SBEvent::SBEvent (EventSP &event_sp) :
4630fdc8d8SChris Lattner     m_event_sp (event_sp),
476611103cSGreg Clayton     m_opaque (event_sp.get())
4830fdc8d8SChris Lattner {
49*750cd175SCaroline Tice     Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
50ceb6b139SCaroline Tice 
51ceb6b139SCaroline Tice     if (log)
52*750cd175SCaroline Tice         log->Printf ("SBEvent::SBEvent (event_sp=%p) => this.sp = %p", event_sp.get(), m_opaque);
5330fdc8d8SChris Lattner }
5430fdc8d8SChris Lattner 
5530fdc8d8SChris Lattner SBEvent::~SBEvent()
5630fdc8d8SChris Lattner {
5730fdc8d8SChris Lattner }
5830fdc8d8SChris Lattner 
5930fdc8d8SChris Lattner const char *
6030fdc8d8SChris Lattner SBEvent::GetDataFlavor ()
6130fdc8d8SChris Lattner {
626611103cSGreg Clayton     Event *lldb_event = get();
6330fdc8d8SChris Lattner     if (lldb_event)
6430fdc8d8SChris Lattner         return lldb_event->GetData()->GetFlavor().AsCString();
6530fdc8d8SChris Lattner     return NULL;
6630fdc8d8SChris Lattner }
6730fdc8d8SChris Lattner 
6830fdc8d8SChris Lattner uint32_t
6930fdc8d8SChris Lattner SBEvent::GetType () const
7030fdc8d8SChris Lattner {
71ceb6b139SCaroline Tice     Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
72ceb6b139SCaroline Tice 
73*750cd175SCaroline Tice     //if (log)
74*750cd175SCaroline Tice     //    log->Printf ("SBEvent::GetType ()");
75ceb6b139SCaroline Tice 
766611103cSGreg Clayton     const Event *lldb_event = get();
77ceb6b139SCaroline Tice     uint32_t event_type = 0;
7830fdc8d8SChris Lattner     if (lldb_event)
79ceb6b139SCaroline Tice         event_type = lldb_event->GetType();
80ceb6b139SCaroline Tice 
81ceb6b139SCaroline Tice     if (log)
82*750cd175SCaroline Tice         log->Printf ("SBEvent::GetType (this.sp=%p) => %d", m_opaque, event_type);
83ceb6b139SCaroline Tice 
84ceb6b139SCaroline Tice     return event_type;
8530fdc8d8SChris Lattner }
8630fdc8d8SChris Lattner 
8730fdc8d8SChris Lattner SBBroadcaster
8830fdc8d8SChris Lattner SBEvent::GetBroadcaster () const
8930fdc8d8SChris Lattner {
9030fdc8d8SChris Lattner     SBBroadcaster broadcaster;
916611103cSGreg Clayton     const Event *lldb_event = get();
9230fdc8d8SChris Lattner     if (lldb_event)
936611103cSGreg Clayton         broadcaster.reset (lldb_event->GetBroadcaster(), false);
9430fdc8d8SChris Lattner     return broadcaster;
9530fdc8d8SChris Lattner }
9630fdc8d8SChris Lattner 
9730fdc8d8SChris Lattner bool
9830fdc8d8SChris Lattner SBEvent::BroadcasterMatchesPtr (const SBBroadcaster *broadcaster)
9930fdc8d8SChris Lattner {
10030fdc8d8SChris Lattner     if (broadcaster)
10130fdc8d8SChris Lattner     {
1026611103cSGreg Clayton         Event *lldb_event = get();
10330fdc8d8SChris Lattner         if (lldb_event)
1046611103cSGreg Clayton             return lldb_event->BroadcasterIs (broadcaster->get());
10530fdc8d8SChris Lattner     }
10630fdc8d8SChris Lattner     return false;
10730fdc8d8SChris Lattner }
10830fdc8d8SChris Lattner 
10930fdc8d8SChris Lattner bool
11030fdc8d8SChris Lattner SBEvent::BroadcasterMatchesRef (const SBBroadcaster &broadcaster)
11130fdc8d8SChris Lattner {
112ceb6b139SCaroline Tice     Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
113ceb6b139SCaroline Tice 
114ceb6b139SCaroline Tice     if (log)
115ceb6b139SCaroline Tice         log->Printf ("SBEvent::BroadcasterMatchesRef (broacaster) broadcaster = %p", &broadcaster);
116ceb6b139SCaroline Tice 
1176611103cSGreg Clayton     Event *lldb_event = get();
118ceb6b139SCaroline Tice     bool success = false;
11930fdc8d8SChris Lattner     if (lldb_event)
120ceb6b139SCaroline Tice         success = lldb_event->BroadcasterIs (broadcaster.get());
121ceb6b139SCaroline Tice 
122ceb6b139SCaroline Tice     if (log)
123*750cd175SCaroline Tice         log->Printf ("SBEvent::BroadcasterMathesRef (this.sp=%p, broadcaster.obj=%p) => %s", m_opaque,
124*750cd175SCaroline Tice                      broadcaster.get(), (success ? "true" : "false"));
125ceb6b139SCaroline Tice 
126ceb6b139SCaroline Tice     return success;
12730fdc8d8SChris Lattner }
12830fdc8d8SChris Lattner 
12930fdc8d8SChris Lattner void
13030fdc8d8SChris Lattner SBEvent::Clear()
13130fdc8d8SChris Lattner {
1326611103cSGreg Clayton     Event *lldb_event = get();
13330fdc8d8SChris Lattner     if (lldb_event)
13430fdc8d8SChris Lattner         lldb_event->Clear();
13530fdc8d8SChris Lattner }
13630fdc8d8SChris Lattner 
13730fdc8d8SChris Lattner EventSP &
1386611103cSGreg Clayton SBEvent::GetSP () const
13930fdc8d8SChris Lattner {
14030fdc8d8SChris Lattner     return m_event_sp;
14130fdc8d8SChris Lattner }
14230fdc8d8SChris Lattner 
14330fdc8d8SChris Lattner Event *
1446611103cSGreg Clayton SBEvent::get() const
14530fdc8d8SChris Lattner {
14630fdc8d8SChris Lattner     // There is a dangerous accessor call GetSharedPtr which can be used, so if
14730fdc8d8SChris Lattner     // we have anything valid in m_event_sp, we must use that since if it gets
14830fdc8d8SChris Lattner     // used by a function that puts something in there, then it won't update
1496611103cSGreg Clayton     // m_opaque...
15030fdc8d8SChris Lattner     if (m_event_sp)
1516611103cSGreg Clayton         m_opaque = m_event_sp.get();
15230fdc8d8SChris Lattner 
1536611103cSGreg Clayton     return m_opaque;
15430fdc8d8SChris Lattner }
15530fdc8d8SChris Lattner 
15630fdc8d8SChris Lattner void
1576611103cSGreg Clayton SBEvent::reset (EventSP &event_sp)
15830fdc8d8SChris Lattner {
15930fdc8d8SChris Lattner     m_event_sp = event_sp;
1606611103cSGreg Clayton     m_opaque = m_event_sp.get();
16130fdc8d8SChris Lattner }
16230fdc8d8SChris Lattner 
16330fdc8d8SChris Lattner void
1646611103cSGreg Clayton SBEvent::reset (Event* event_ptr)
16530fdc8d8SChris Lattner {
1666611103cSGreg Clayton     m_opaque = event_ptr;
16730fdc8d8SChris Lattner     m_event_sp.reset();
16830fdc8d8SChris Lattner }
16930fdc8d8SChris Lattner 
17030fdc8d8SChris Lattner bool
17130fdc8d8SChris Lattner SBEvent::IsValid() const
17230fdc8d8SChris Lattner {
1736611103cSGreg Clayton     // Do NOT use m_opaque directly!!! Must use the SBEvent::get()
1746611103cSGreg Clayton     // accessor. See comments in SBEvent::get()....
1756611103cSGreg Clayton     return SBEvent::get() != NULL;
17630fdc8d8SChris Lattner 
17730fdc8d8SChris Lattner }
17830fdc8d8SChris Lattner 
17930fdc8d8SChris Lattner const char *
18030fdc8d8SChris Lattner SBEvent::GetCStringFromEvent (const SBEvent &event)
18130fdc8d8SChris Lattner {
182ceb6b139SCaroline Tice     Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
183ceb6b139SCaroline Tice 
184ceb6b139SCaroline Tice     if (log)
185*750cd175SCaroline Tice         log->Printf ("GetCStringFromEvent (event.sp=%p) => %s", event.m_opaque,
186ceb6b139SCaroline Tice                      reinterpret_cast<const char *>(EventDataBytes::GetBytesFromEvent (event.get())));
187ceb6b139SCaroline Tice 
1886611103cSGreg Clayton     return reinterpret_cast<const char *>(EventDataBytes::GetBytesFromEvent (event.get()));
18930fdc8d8SChris Lattner }
19030fdc8d8SChris Lattner 
19130fdc8d8SChris Lattner 
192dde9cff3SCaroline Tice bool
193dde9cff3SCaroline Tice SBEvent::GetDescription (SBStream &description)
194dde9cff3SCaroline Tice {
195dde9cff3SCaroline Tice     if (m_opaque)
196dde9cff3SCaroline Tice     {
197dac97f31SCaroline Tice         description.ref();
198dde9cff3SCaroline Tice         m_opaque->Dump (description.get());
199dde9cff3SCaroline Tice     }
200dde9cff3SCaroline Tice     else
201dde9cff3SCaroline Tice         description.Printf ("No value");
202dde9cff3SCaroline Tice 
203dde9cff3SCaroline Tice     return true;
204dde9cff3SCaroline Tice }
205ceb6b139SCaroline Tice 
206ceb6b139SCaroline Tice bool
207ceb6b139SCaroline Tice SBEvent::GetDescription (SBStream &description) const
208ceb6b139SCaroline Tice {
209ceb6b139SCaroline Tice     if (m_opaque)
210ceb6b139SCaroline Tice     {
211ceb6b139SCaroline Tice         description.ref();
212ceb6b139SCaroline Tice         m_opaque->Dump (description.get());
213ceb6b139SCaroline Tice     }
214ceb6b139SCaroline Tice     else
215ceb6b139SCaroline Tice         description.Printf ("No value");
216ceb6b139SCaroline Tice 
217ceb6b139SCaroline Tice     return true;
218ceb6b139SCaroline Tice }
219