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 { 36750cd175SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 37ceb6b139SCaroline Tice 38ceb6b139SCaroline Tice if (log) 39ceb6b139SCaroline Tice { 40*93aa84e8SGreg Clayton log->Printf ("SBEvent::SBEvent (event_type=0x%8.8x, cstr='%s', cstr_len=%d) => SBEvent(%p)", 41*93aa84e8SGreg Clayton event_type, 42*93aa84e8SGreg Clayton cstr, 43*93aa84e8SGreg Clayton cstr_len, 44*93aa84e8SGreg Clayton m_opaque); 45ceb6b139SCaroline Tice } 4630fdc8d8SChris Lattner } 4730fdc8d8SChris Lattner 4830fdc8d8SChris Lattner SBEvent::SBEvent (EventSP &event_sp) : 4930fdc8d8SChris Lattner m_event_sp (event_sp), 506611103cSGreg Clayton m_opaque (event_sp.get()) 5130fdc8d8SChris Lattner { 52750cd175SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 53ceb6b139SCaroline Tice 54ceb6b139SCaroline Tice if (log) 55*93aa84e8SGreg Clayton log->Printf ("SBEvent::SBEvent (event_sp=%p) => SBEvent(%p)", event_sp.get(), m_opaque); 5630fdc8d8SChris Lattner } 5730fdc8d8SChris Lattner 5830fdc8d8SChris Lattner SBEvent::~SBEvent() 5930fdc8d8SChris Lattner { 6030fdc8d8SChris Lattner } 6130fdc8d8SChris Lattner 6230fdc8d8SChris Lattner const char * 6330fdc8d8SChris Lattner SBEvent::GetDataFlavor () 6430fdc8d8SChris Lattner { 656611103cSGreg Clayton Event *lldb_event = get(); 6630fdc8d8SChris Lattner if (lldb_event) 6730fdc8d8SChris Lattner return lldb_event->GetData()->GetFlavor().AsCString(); 6830fdc8d8SChris Lattner return NULL; 6930fdc8d8SChris Lattner } 7030fdc8d8SChris Lattner 7130fdc8d8SChris Lattner uint32_t 7230fdc8d8SChris Lattner SBEvent::GetType () const 7330fdc8d8SChris Lattner { 74ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 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*93aa84e8SGreg Clayton log->Printf ("SBEvent(%p)::GetType () => 0x%8.8x", get(), 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 1146611103cSGreg Clayton Event *lldb_event = get(); 115ceb6b139SCaroline Tice bool success = false; 11630fdc8d8SChris Lattner if (lldb_event) 117ceb6b139SCaroline Tice success = lldb_event->BroadcasterIs (broadcaster.get()); 118ceb6b139SCaroline Tice 119ceb6b139SCaroline Tice if (log) 120*93aa84e8SGreg Clayton log->Printf ("SBEvent(%p)::BroadcasterMathesRef (broadcaster.ptr=%p) => %s", 121*93aa84e8SGreg Clayton get(), 122*93aa84e8SGreg Clayton broadcaster.get(), 123*93aa84e8SGreg Clayton success ? "true" : "false"); 124ceb6b139SCaroline Tice 125ceb6b139SCaroline Tice return success; 12630fdc8d8SChris Lattner } 12730fdc8d8SChris Lattner 12830fdc8d8SChris Lattner void 12930fdc8d8SChris Lattner SBEvent::Clear() 13030fdc8d8SChris Lattner { 1316611103cSGreg Clayton Event *lldb_event = get(); 13230fdc8d8SChris Lattner if (lldb_event) 13330fdc8d8SChris Lattner lldb_event->Clear(); 13430fdc8d8SChris Lattner } 13530fdc8d8SChris Lattner 13630fdc8d8SChris Lattner EventSP & 1376611103cSGreg Clayton SBEvent::GetSP () const 13830fdc8d8SChris Lattner { 13930fdc8d8SChris Lattner return m_event_sp; 14030fdc8d8SChris Lattner } 14130fdc8d8SChris Lattner 14230fdc8d8SChris Lattner Event * 1436611103cSGreg Clayton SBEvent::get() const 14430fdc8d8SChris Lattner { 14530fdc8d8SChris Lattner // There is a dangerous accessor call GetSharedPtr which can be used, so if 14630fdc8d8SChris Lattner // we have anything valid in m_event_sp, we must use that since if it gets 14730fdc8d8SChris Lattner // used by a function that puts something in there, then it won't update 1486611103cSGreg Clayton // m_opaque... 14930fdc8d8SChris Lattner if (m_event_sp) 1506611103cSGreg Clayton m_opaque = m_event_sp.get(); 15130fdc8d8SChris Lattner 1526611103cSGreg Clayton return m_opaque; 15330fdc8d8SChris Lattner } 15430fdc8d8SChris Lattner 15530fdc8d8SChris Lattner void 1566611103cSGreg Clayton SBEvent::reset (EventSP &event_sp) 15730fdc8d8SChris Lattner { 15830fdc8d8SChris Lattner m_event_sp = event_sp; 1596611103cSGreg Clayton m_opaque = m_event_sp.get(); 16030fdc8d8SChris Lattner } 16130fdc8d8SChris Lattner 16230fdc8d8SChris Lattner void 1636611103cSGreg Clayton SBEvent::reset (Event* event_ptr) 16430fdc8d8SChris Lattner { 1656611103cSGreg Clayton m_opaque = event_ptr; 16630fdc8d8SChris Lattner m_event_sp.reset(); 16730fdc8d8SChris Lattner } 16830fdc8d8SChris Lattner 16930fdc8d8SChris Lattner bool 17030fdc8d8SChris Lattner SBEvent::IsValid() const 17130fdc8d8SChris Lattner { 1726611103cSGreg Clayton // Do NOT use m_opaque directly!!! Must use the SBEvent::get() 1736611103cSGreg Clayton // accessor. See comments in SBEvent::get().... 1746611103cSGreg Clayton return SBEvent::get() != NULL; 17530fdc8d8SChris Lattner 17630fdc8d8SChris Lattner } 17730fdc8d8SChris Lattner 17830fdc8d8SChris Lattner const char * 17930fdc8d8SChris Lattner SBEvent::GetCStringFromEvent (const SBEvent &event) 18030fdc8d8SChris Lattner { 181ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 182ceb6b139SCaroline Tice 183ceb6b139SCaroline Tice if (log) 184*93aa84e8SGreg Clayton log->Printf ("SBEvent(%p)::GetCStringFromEvent () => '%s'", 185*93aa84e8SGreg Clayton event.get(), 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 { 195*93aa84e8SGreg Clayton if (get()) 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 { 209*93aa84e8SGreg Clayton if (get()) 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