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 (), 28efabb123SGreg Clayton m_opaque_ptr (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))), 34efabb123SGreg Clayton m_opaque_ptr (m_event_sp.get()) 3530fdc8d8SChris Lattner { 3630fdc8d8SChris Lattner } 3730fdc8d8SChris Lattner 3830fdc8d8SChris Lattner SBEvent::SBEvent (EventSP &event_sp) : 3930fdc8d8SChris Lattner m_event_sp (event_sp), 40efabb123SGreg Clayton m_opaque_ptr (event_sp.get()) 4130fdc8d8SChris Lattner { 4230fdc8d8SChris Lattner } 4330fdc8d8SChris Lattner 44efabb123SGreg Clayton SBEvent::SBEvent (const SBEvent &rhs) : 45efabb123SGreg Clayton m_event_sp (rhs.m_event_sp), 46efabb123SGreg Clayton m_opaque_ptr (rhs.m_opaque_ptr) 47efabb123SGreg Clayton { 48efabb123SGreg Clayton 49efabb123SGreg Clayton } 50efabb123SGreg Clayton 51efabb123SGreg Clayton const SBEvent & 52efabb123SGreg Clayton SBEvent::operator = (const SBEvent &rhs) 53efabb123SGreg Clayton { 54efabb123SGreg Clayton if (this != &rhs) 55efabb123SGreg Clayton { 56efabb123SGreg Clayton m_event_sp = rhs.m_event_sp; 57efabb123SGreg Clayton m_opaque_ptr = rhs.m_opaque_ptr; 58efabb123SGreg Clayton } 59efabb123SGreg Clayton return *this; 60efabb123SGreg Clayton } 61efabb123SGreg Clayton 6230fdc8d8SChris Lattner SBEvent::~SBEvent() 6330fdc8d8SChris Lattner { 6430fdc8d8SChris Lattner } 6530fdc8d8SChris Lattner 6630fdc8d8SChris Lattner const char * 6730fdc8d8SChris Lattner SBEvent::GetDataFlavor () 6830fdc8d8SChris Lattner { 696611103cSGreg Clayton Event *lldb_event = get(); 7030fdc8d8SChris Lattner if (lldb_event) 7130fdc8d8SChris Lattner return lldb_event->GetData()->GetFlavor().AsCString(); 7230fdc8d8SChris Lattner return NULL; 7330fdc8d8SChris Lattner } 7430fdc8d8SChris Lattner 7530fdc8d8SChris Lattner uint32_t 7630fdc8d8SChris Lattner SBEvent::GetType () const 7730fdc8d8SChris Lattner { 78*2d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 79ceb6b139SCaroline Tice 806611103cSGreg Clayton const Event *lldb_event = get(); 81ceb6b139SCaroline Tice uint32_t event_type = 0; 8230fdc8d8SChris Lattner if (lldb_event) 83ceb6b139SCaroline Tice event_type = lldb_event->GetType(); 84ceb6b139SCaroline Tice 85ceb6b139SCaroline Tice if (log) 86cfd1acedSGreg Clayton { 87cfd1acedSGreg Clayton StreamString sstr; 88cfd1acedSGreg Clayton if (lldb_event && lldb_event->GetBroadcaster() && lldb_event->GetBroadcaster()->GetEventNames(sstr, event_type, true)) 89cfd1acedSGreg Clayton log->Printf ("SBEvent(%p)::GetType () => 0x%8.8x (%s)", get(), event_type, sstr.GetData()); 90cfd1acedSGreg Clayton else 9193aa84e8SGreg Clayton log->Printf ("SBEvent(%p)::GetType () => 0x%8.8x", get(), event_type); 92ceb6b139SCaroline Tice 93cfd1acedSGreg Clayton } 94cfd1acedSGreg Clayton 95ceb6b139SCaroline Tice return event_type; 9630fdc8d8SChris Lattner } 9730fdc8d8SChris Lattner 9830fdc8d8SChris Lattner SBBroadcaster 9930fdc8d8SChris Lattner SBEvent::GetBroadcaster () const 10030fdc8d8SChris Lattner { 10130fdc8d8SChris Lattner SBBroadcaster broadcaster; 1026611103cSGreg Clayton const Event *lldb_event = get(); 10330fdc8d8SChris Lattner if (lldb_event) 1046611103cSGreg Clayton broadcaster.reset (lldb_event->GetBroadcaster(), false); 10530fdc8d8SChris Lattner return broadcaster; 10630fdc8d8SChris Lattner } 10730fdc8d8SChris Lattner 10830fdc8d8SChris Lattner bool 10930fdc8d8SChris Lattner SBEvent::BroadcasterMatchesPtr (const SBBroadcaster *broadcaster) 11030fdc8d8SChris Lattner { 11130fdc8d8SChris Lattner if (broadcaster) 112cfd1acedSGreg Clayton return BroadcasterMatchesRef (*broadcaster); 11330fdc8d8SChris Lattner return false; 11430fdc8d8SChris Lattner } 11530fdc8d8SChris Lattner 11630fdc8d8SChris Lattner bool 11730fdc8d8SChris Lattner SBEvent::BroadcasterMatchesRef (const SBBroadcaster &broadcaster) 11830fdc8d8SChris Lattner { 119ceb6b139SCaroline Tice 1206611103cSGreg Clayton Event *lldb_event = get(); 121ceb6b139SCaroline Tice bool success = false; 12230fdc8d8SChris Lattner if (lldb_event) 123ceb6b139SCaroline Tice success = lldb_event->BroadcasterIs (broadcaster.get()); 124ceb6b139SCaroline Tice 125cfd1acedSGreg Clayton // For logging, this gets a little chatty so only enable this when verbose logging is on 126*2d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API | LIBLLDB_LOG_VERBOSE)); 127ceb6b139SCaroline Tice if (log) 128cfd1acedSGreg Clayton log->Printf ("SBEvent(%p)::BroadcasterMatchesRef (SBBroadcaster(%p): %s) => %i", 12993aa84e8SGreg Clayton get(), 13093aa84e8SGreg Clayton broadcaster.get(), 131cfd1acedSGreg Clayton broadcaster.GetName(), 1324838131bSGreg Clayton success); 133ceb6b139SCaroline Tice 134ceb6b139SCaroline Tice return success; 13530fdc8d8SChris Lattner } 13630fdc8d8SChris Lattner 13730fdc8d8SChris Lattner void 13830fdc8d8SChris Lattner SBEvent::Clear() 13930fdc8d8SChris Lattner { 1406611103cSGreg Clayton Event *lldb_event = get(); 14130fdc8d8SChris Lattner if (lldb_event) 14230fdc8d8SChris Lattner lldb_event->Clear(); 14330fdc8d8SChris Lattner } 14430fdc8d8SChris Lattner 14530fdc8d8SChris Lattner EventSP & 1466611103cSGreg Clayton SBEvent::GetSP () const 14730fdc8d8SChris Lattner { 14830fdc8d8SChris Lattner return m_event_sp; 14930fdc8d8SChris Lattner } 15030fdc8d8SChris Lattner 15130fdc8d8SChris Lattner Event * 1526611103cSGreg Clayton SBEvent::get() const 15330fdc8d8SChris Lattner { 15430fdc8d8SChris Lattner // There is a dangerous accessor call GetSharedPtr which can be used, so if 15530fdc8d8SChris Lattner // we have anything valid in m_event_sp, we must use that since if it gets 15630fdc8d8SChris Lattner // used by a function that puts something in there, then it won't update 157efabb123SGreg Clayton // m_opaque_ptr... 15830fdc8d8SChris Lattner if (m_event_sp) 159efabb123SGreg Clayton m_opaque_ptr = m_event_sp.get(); 16030fdc8d8SChris Lattner 161efabb123SGreg Clayton return m_opaque_ptr; 16230fdc8d8SChris Lattner } 16330fdc8d8SChris Lattner 16430fdc8d8SChris Lattner void 1656611103cSGreg Clayton SBEvent::reset (EventSP &event_sp) 16630fdc8d8SChris Lattner { 16730fdc8d8SChris Lattner m_event_sp = event_sp; 168efabb123SGreg Clayton m_opaque_ptr = m_event_sp.get(); 16930fdc8d8SChris Lattner } 17030fdc8d8SChris Lattner 17130fdc8d8SChris Lattner void 1726611103cSGreg Clayton SBEvent::reset (Event* event_ptr) 17330fdc8d8SChris Lattner { 174efabb123SGreg Clayton m_opaque_ptr = event_ptr; 17530fdc8d8SChris Lattner m_event_sp.reset(); 17630fdc8d8SChris Lattner } 17730fdc8d8SChris Lattner 17830fdc8d8SChris Lattner bool 17930fdc8d8SChris Lattner SBEvent::IsValid() const 18030fdc8d8SChris Lattner { 181efabb123SGreg Clayton // Do NOT use m_opaque_ptr directly!!! Must use the SBEvent::get() 1826611103cSGreg Clayton // accessor. See comments in SBEvent::get().... 1836611103cSGreg Clayton return SBEvent::get() != NULL; 18430fdc8d8SChris Lattner 18530fdc8d8SChris Lattner } 18630fdc8d8SChris Lattner 18730fdc8d8SChris Lattner const char * 18830fdc8d8SChris Lattner SBEvent::GetCStringFromEvent (const SBEvent &event) 18930fdc8d8SChris Lattner { 190*2d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 191ceb6b139SCaroline Tice 192ceb6b139SCaroline Tice if (log) 193cfd1acedSGreg Clayton log->Printf ("SBEvent(%p)::GetCStringFromEvent () => \"%s\"", 19493aa84e8SGreg Clayton event.get(), 195ceb6b139SCaroline Tice reinterpret_cast<const char *>(EventDataBytes::GetBytesFromEvent (event.get()))); 196ceb6b139SCaroline Tice 1976611103cSGreg Clayton return reinterpret_cast<const char *>(EventDataBytes::GetBytesFromEvent (event.get())); 19830fdc8d8SChris Lattner } 19930fdc8d8SChris Lattner 20030fdc8d8SChris Lattner 201dde9cff3SCaroline Tice bool 202dde9cff3SCaroline Tice SBEvent::GetDescription (SBStream &description) 203dde9cff3SCaroline Tice { 20493aa84e8SGreg Clayton if (get()) 205dde9cff3SCaroline Tice { 206dac97f31SCaroline Tice description.ref(); 207efabb123SGreg Clayton m_opaque_ptr->Dump (description.get()); 208dde9cff3SCaroline Tice } 209dde9cff3SCaroline Tice else 210dde9cff3SCaroline Tice description.Printf ("No value"); 211dde9cff3SCaroline Tice 212dde9cff3SCaroline Tice return true; 213dde9cff3SCaroline Tice } 214ceb6b139SCaroline Tice 215ceb6b139SCaroline Tice bool 216ceb6b139SCaroline Tice SBEvent::GetDescription (SBStream &description) const 217ceb6b139SCaroline Tice { 21893aa84e8SGreg Clayton if (get()) 219ceb6b139SCaroline Tice { 220ceb6b139SCaroline Tice description.ref(); 221efabb123SGreg Clayton m_opaque_ptr->Dump (description.get()); 222ceb6b139SCaroline Tice } 223ceb6b139SCaroline Tice else 224ceb6b139SCaroline Tice description.Printf ("No value"); 225ceb6b139SCaroline Tice 226ceb6b139SCaroline Tice return true; 227ceb6b139SCaroline Tice } 228