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 { 3630fdc8d8SChris Lattner } 3730fdc8d8SChris Lattner 3830fdc8d8SChris Lattner SBEvent::SBEvent (EventSP &event_sp) : 3930fdc8d8SChris Lattner m_event_sp (event_sp), 406611103cSGreg Clayton m_opaque (event_sp.get()) 4130fdc8d8SChris Lattner { 4230fdc8d8SChris Lattner } 4330fdc8d8SChris Lattner 4430fdc8d8SChris Lattner SBEvent::~SBEvent() 4530fdc8d8SChris Lattner { 4630fdc8d8SChris Lattner } 4730fdc8d8SChris Lattner 4830fdc8d8SChris Lattner const char * 4930fdc8d8SChris Lattner SBEvent::GetDataFlavor () 5030fdc8d8SChris Lattner { 516611103cSGreg Clayton Event *lldb_event = get(); 5230fdc8d8SChris Lattner if (lldb_event) 5330fdc8d8SChris Lattner return lldb_event->GetData()->GetFlavor().AsCString(); 5430fdc8d8SChris Lattner return NULL; 5530fdc8d8SChris Lattner } 5630fdc8d8SChris Lattner 5730fdc8d8SChris Lattner uint32_t 5830fdc8d8SChris Lattner SBEvent::GetType () const 5930fdc8d8SChris Lattner { 60ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 61ceb6b139SCaroline Tice 626611103cSGreg Clayton const Event *lldb_event = get(); 63ceb6b139SCaroline Tice uint32_t event_type = 0; 6430fdc8d8SChris Lattner if (lldb_event) 65ceb6b139SCaroline Tice event_type = lldb_event->GetType(); 66ceb6b139SCaroline Tice 67ceb6b139SCaroline Tice if (log) 68*cfd1acedSGreg Clayton { 69*cfd1acedSGreg Clayton StreamString sstr; 70*cfd1acedSGreg Clayton if (lldb_event && lldb_event->GetBroadcaster() && lldb_event->GetBroadcaster()->GetEventNames(sstr, event_type, true)) 71*cfd1acedSGreg Clayton log->Printf ("SBEvent(%p)::GetType () => 0x%8.8x (%s)", get(), event_type, sstr.GetData()); 72*cfd1acedSGreg Clayton else 7393aa84e8SGreg Clayton log->Printf ("SBEvent(%p)::GetType () => 0x%8.8x", get(), event_type); 74ceb6b139SCaroline Tice 75*cfd1acedSGreg Clayton } 76*cfd1acedSGreg Clayton 77ceb6b139SCaroline Tice return event_type; 7830fdc8d8SChris Lattner } 7930fdc8d8SChris Lattner 8030fdc8d8SChris Lattner SBBroadcaster 8130fdc8d8SChris Lattner SBEvent::GetBroadcaster () const 8230fdc8d8SChris Lattner { 8330fdc8d8SChris Lattner SBBroadcaster broadcaster; 846611103cSGreg Clayton const Event *lldb_event = get(); 8530fdc8d8SChris Lattner if (lldb_event) 866611103cSGreg Clayton broadcaster.reset (lldb_event->GetBroadcaster(), false); 8730fdc8d8SChris Lattner return broadcaster; 8830fdc8d8SChris Lattner } 8930fdc8d8SChris Lattner 9030fdc8d8SChris Lattner bool 9130fdc8d8SChris Lattner SBEvent::BroadcasterMatchesPtr (const SBBroadcaster *broadcaster) 9230fdc8d8SChris Lattner { 9330fdc8d8SChris Lattner if (broadcaster) 94*cfd1acedSGreg Clayton return BroadcasterMatchesRef (*broadcaster); 9530fdc8d8SChris Lattner return false; 9630fdc8d8SChris Lattner } 9730fdc8d8SChris Lattner 9830fdc8d8SChris Lattner bool 9930fdc8d8SChris Lattner SBEvent::BroadcasterMatchesRef (const SBBroadcaster &broadcaster) 10030fdc8d8SChris Lattner { 101ceb6b139SCaroline Tice 1026611103cSGreg Clayton Event *lldb_event = get(); 103ceb6b139SCaroline Tice bool success = false; 10430fdc8d8SChris Lattner if (lldb_event) 105ceb6b139SCaroline Tice success = lldb_event->BroadcasterIs (broadcaster.get()); 106ceb6b139SCaroline Tice 107*cfd1acedSGreg Clayton // For logging, this gets a little chatty so only enable this when verbose logging is on 108*cfd1acedSGreg Clayton Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API | LIBLLDB_LOG_VERBOSE); 109ceb6b139SCaroline Tice if (log) 110*cfd1acedSGreg Clayton log->Printf ("SBEvent(%p)::BroadcasterMatchesRef (SBBroadcaster(%p): %s) => %i", 11193aa84e8SGreg Clayton get(), 11293aa84e8SGreg Clayton broadcaster.get(), 113*cfd1acedSGreg Clayton broadcaster.GetName(), 1144838131bSGreg Clayton success); 115ceb6b139SCaroline Tice 116ceb6b139SCaroline Tice return success; 11730fdc8d8SChris Lattner } 11830fdc8d8SChris Lattner 11930fdc8d8SChris Lattner void 12030fdc8d8SChris Lattner SBEvent::Clear() 12130fdc8d8SChris Lattner { 1226611103cSGreg Clayton Event *lldb_event = get(); 12330fdc8d8SChris Lattner if (lldb_event) 12430fdc8d8SChris Lattner lldb_event->Clear(); 12530fdc8d8SChris Lattner } 12630fdc8d8SChris Lattner 12730fdc8d8SChris Lattner EventSP & 1286611103cSGreg Clayton SBEvent::GetSP () const 12930fdc8d8SChris Lattner { 13030fdc8d8SChris Lattner return m_event_sp; 13130fdc8d8SChris Lattner } 13230fdc8d8SChris Lattner 13330fdc8d8SChris Lattner Event * 1346611103cSGreg Clayton SBEvent::get() const 13530fdc8d8SChris Lattner { 13630fdc8d8SChris Lattner // There is a dangerous accessor call GetSharedPtr which can be used, so if 13730fdc8d8SChris Lattner // we have anything valid in m_event_sp, we must use that since if it gets 13830fdc8d8SChris Lattner // used by a function that puts something in there, then it won't update 1396611103cSGreg Clayton // m_opaque... 14030fdc8d8SChris Lattner if (m_event_sp) 1416611103cSGreg Clayton m_opaque = m_event_sp.get(); 14230fdc8d8SChris Lattner 1436611103cSGreg Clayton return m_opaque; 14430fdc8d8SChris Lattner } 14530fdc8d8SChris Lattner 14630fdc8d8SChris Lattner void 1476611103cSGreg Clayton SBEvent::reset (EventSP &event_sp) 14830fdc8d8SChris Lattner { 14930fdc8d8SChris Lattner m_event_sp = event_sp; 1506611103cSGreg Clayton m_opaque = m_event_sp.get(); 15130fdc8d8SChris Lattner } 15230fdc8d8SChris Lattner 15330fdc8d8SChris Lattner void 1546611103cSGreg Clayton SBEvent::reset (Event* event_ptr) 15530fdc8d8SChris Lattner { 1566611103cSGreg Clayton m_opaque = event_ptr; 15730fdc8d8SChris Lattner m_event_sp.reset(); 15830fdc8d8SChris Lattner } 15930fdc8d8SChris Lattner 16030fdc8d8SChris Lattner bool 16130fdc8d8SChris Lattner SBEvent::IsValid() const 16230fdc8d8SChris Lattner { 1636611103cSGreg Clayton // Do NOT use m_opaque directly!!! Must use the SBEvent::get() 1646611103cSGreg Clayton // accessor. See comments in SBEvent::get().... 1656611103cSGreg Clayton return SBEvent::get() != NULL; 16630fdc8d8SChris Lattner 16730fdc8d8SChris Lattner } 16830fdc8d8SChris Lattner 16930fdc8d8SChris Lattner const char * 17030fdc8d8SChris Lattner SBEvent::GetCStringFromEvent (const SBEvent &event) 17130fdc8d8SChris Lattner { 172ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 173ceb6b139SCaroline Tice 174ceb6b139SCaroline Tice if (log) 175*cfd1acedSGreg Clayton log->Printf ("SBEvent(%p)::GetCStringFromEvent () => \"%s\"", 17693aa84e8SGreg Clayton event.get(), 177ceb6b139SCaroline Tice reinterpret_cast<const char *>(EventDataBytes::GetBytesFromEvent (event.get()))); 178ceb6b139SCaroline Tice 1796611103cSGreg Clayton return reinterpret_cast<const char *>(EventDataBytes::GetBytesFromEvent (event.get())); 18030fdc8d8SChris Lattner } 18130fdc8d8SChris Lattner 18230fdc8d8SChris Lattner 183dde9cff3SCaroline Tice bool 184dde9cff3SCaroline Tice SBEvent::GetDescription (SBStream &description) 185dde9cff3SCaroline Tice { 18693aa84e8SGreg Clayton if (get()) 187dde9cff3SCaroline Tice { 188dac97f31SCaroline Tice description.ref(); 189dde9cff3SCaroline Tice m_opaque->Dump (description.get()); 190dde9cff3SCaroline Tice } 191dde9cff3SCaroline Tice else 192dde9cff3SCaroline Tice description.Printf ("No value"); 193dde9cff3SCaroline Tice 194dde9cff3SCaroline Tice return true; 195dde9cff3SCaroline Tice } 196ceb6b139SCaroline Tice 197ceb6b139SCaroline Tice bool 198ceb6b139SCaroline Tice SBEvent::GetDescription (SBStream &description) const 199ceb6b139SCaroline Tice { 20093aa84e8SGreg Clayton if (get()) 201ceb6b139SCaroline Tice { 202ceb6b139SCaroline Tice description.ref(); 203ceb6b139SCaroline Tice m_opaque->Dump (description.get()); 204ceb6b139SCaroline Tice } 205ceb6b139SCaroline Tice else 206ceb6b139SCaroline Tice description.Printf ("No value"); 207ceb6b139SCaroline Tice 208ceb6b139SCaroline Tice return true; 209ceb6b139SCaroline Tice } 210