1254721Semaste//===-- SBBroadcaster.cpp ---------------------------------------*- C++ -*-===// 2254721Semaste// 3254721Semaste// The LLVM Compiler Infrastructure 4254721Semaste// 5254721Semaste// This file is distributed under the University of Illinois Open Source 6254721Semaste// License. See LICENSE.TXT for details. 7254721Semaste// 8254721Semaste//===----------------------------------------------------------------------===// 9254721Semaste 10254721Semaste#include "lldb/Core/Broadcaster.h" 11254721Semaste#include "lldb/Core/Log.h" 12254721Semaste 13254721Semaste#include "lldb/API/SBBroadcaster.h" 14254721Semaste#include "lldb/API/SBListener.h" 15254721Semaste#include "lldb/API/SBEvent.h" 16254721Semaste 17254721Semasteusing namespace lldb; 18254721Semasteusing namespace lldb_private; 19254721Semaste 20254721Semaste 21254721SemasteSBBroadcaster::SBBroadcaster () : 22254721Semaste m_opaque_sp (), 23254721Semaste m_opaque_ptr (NULL) 24254721Semaste{ 25254721Semaste} 26254721Semaste 27254721SemasteSBBroadcaster::SBBroadcaster (const char *name) : 28254721Semaste m_opaque_sp (new Broadcaster (NULL, name)), 29254721Semaste m_opaque_ptr (NULL) 30254721Semaste{ 31254721Semaste m_opaque_ptr = m_opaque_sp.get(); 32254721Semaste Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API | LIBLLDB_LOG_VERBOSE)); 33254721Semaste 34254721Semaste if (log) 35254721Semaste log->Printf ("SBBroadcaster::SBBroadcaster (name=\"%s\") => SBBroadcaster(%p)", 36254721Semaste name, m_opaque_ptr); 37254721Semaste} 38254721Semaste 39254721SemasteSBBroadcaster::SBBroadcaster (lldb_private::Broadcaster *broadcaster, bool owns) : 40254721Semaste m_opaque_sp (owns ? broadcaster : NULL), 41254721Semaste m_opaque_ptr (broadcaster) 42254721Semaste{ 43254721Semaste Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API | LIBLLDB_LOG_VERBOSE)); 44254721Semaste 45254721Semaste if (log) 46254721Semaste log->Printf ("SBBroadcaster::SBBroadcaster (broadcaster=%p, bool owns=%i) => SBBroadcaster(%p)", 47254721Semaste broadcaster, owns, m_opaque_ptr); 48254721Semaste} 49254721Semaste 50254721SemasteSBBroadcaster::SBBroadcaster (const SBBroadcaster &rhs) : 51254721Semaste m_opaque_sp (rhs.m_opaque_sp), 52254721Semaste m_opaque_ptr (rhs.m_opaque_ptr) 53254721Semaste{ 54254721Semaste} 55254721Semaste 56254721Semasteconst SBBroadcaster & 57254721SemasteSBBroadcaster::operator = (const SBBroadcaster &rhs) 58254721Semaste{ 59254721Semaste if (this != &rhs) 60254721Semaste { 61254721Semaste m_opaque_sp = rhs.m_opaque_sp; 62254721Semaste m_opaque_ptr = rhs.m_opaque_ptr; 63254721Semaste } 64254721Semaste return *this; 65254721Semaste} 66254721Semaste 67254721SemasteSBBroadcaster::~SBBroadcaster() 68254721Semaste{ 69254721Semaste reset (NULL, false); 70254721Semaste} 71254721Semaste 72254721Semastevoid 73254721SemasteSBBroadcaster::BroadcastEventByType (uint32_t event_type, bool unique) 74254721Semaste{ 75254721Semaste Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 76254721Semaste 77254721Semaste if (log) 78254721Semaste log->Printf ("SBBroadcaster(%p)::BroadcastEventByType (event_type=0x%8.8x, unique=%i)", m_opaque_ptr, event_type, unique); 79254721Semaste 80254721Semaste if (m_opaque_ptr == NULL) 81254721Semaste return; 82254721Semaste 83254721Semaste if (unique) 84254721Semaste m_opaque_ptr->BroadcastEventIfUnique (event_type); 85254721Semaste else 86254721Semaste m_opaque_ptr->BroadcastEvent (event_type); 87254721Semaste} 88254721Semaste 89254721Semastevoid 90254721SemasteSBBroadcaster::BroadcastEvent (const SBEvent &event, bool unique) 91254721Semaste{ 92254721Semaste Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 93254721Semaste 94254721Semaste if (log) 95254721Semaste log->Printf ("SBBroadcaster(%p)::BroadcastEventByType (SBEvent(%p), unique=%i)", m_opaque_ptr, event.get(), unique); 96254721Semaste 97254721Semaste if (m_opaque_ptr == NULL) 98254721Semaste return; 99254721Semaste 100254721Semaste EventSP event_sp = event.GetSP (); 101254721Semaste if (unique) 102254721Semaste m_opaque_ptr->BroadcastEventIfUnique (event_sp); 103254721Semaste else 104254721Semaste m_opaque_ptr->BroadcastEvent (event_sp); 105254721Semaste} 106254721Semaste 107254721Semastevoid 108254721SemasteSBBroadcaster::AddInitialEventsToListener (const SBListener &listener, uint32_t requested_events) 109254721Semaste{ 110254721Semaste Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 111254721Semaste if (log) 112254721Semaste log->Printf ("SBBroadcaster(%p)::AddInitialEventsToListener (SBListener(%p), event_mask=0x%8.8x)", m_opaque_ptr, listener.get(), requested_events); 113254721Semaste if (m_opaque_ptr) 114254721Semaste m_opaque_ptr->AddInitialEventsToListener (listener.get(), requested_events); 115254721Semaste} 116254721Semaste 117254721Semasteuint32_t 118254721SemasteSBBroadcaster::AddListener (const SBListener &listener, uint32_t event_mask) 119254721Semaste{ 120254721Semaste if (m_opaque_ptr) 121254721Semaste return m_opaque_ptr->AddListener (listener.get(), event_mask); 122254721Semaste return 0; 123254721Semaste} 124254721Semaste 125254721Semasteconst char * 126254721SemasteSBBroadcaster::GetName () const 127254721Semaste{ 128254721Semaste if (m_opaque_ptr) 129254721Semaste return m_opaque_ptr->GetBroadcasterName().GetCString(); 130254721Semaste return NULL; 131254721Semaste} 132254721Semaste 133254721Semastebool 134254721SemasteSBBroadcaster::EventTypeHasListeners (uint32_t event_type) 135254721Semaste{ 136254721Semaste if (m_opaque_ptr) 137254721Semaste return m_opaque_ptr->EventTypeHasListeners (event_type); 138254721Semaste return false; 139254721Semaste} 140254721Semaste 141254721Semastebool 142254721SemasteSBBroadcaster::RemoveListener (const SBListener &listener, uint32_t event_mask) 143254721Semaste{ 144254721Semaste if (m_opaque_ptr) 145254721Semaste return m_opaque_ptr->RemoveListener (listener.get(), event_mask); 146254721Semaste return false; 147254721Semaste} 148254721Semaste 149254721SemasteBroadcaster * 150254721SemasteSBBroadcaster::get () const 151254721Semaste{ 152254721Semaste return m_opaque_ptr; 153254721Semaste} 154254721Semaste 155254721Semastevoid 156254721SemasteSBBroadcaster::reset (Broadcaster *broadcaster, bool owns) 157254721Semaste{ 158254721Semaste if (owns) 159254721Semaste m_opaque_sp.reset (broadcaster); 160254721Semaste else 161254721Semaste m_opaque_sp.reset (); 162254721Semaste m_opaque_ptr = broadcaster; 163254721Semaste} 164254721Semaste 165254721Semaste 166254721Semastebool 167254721SemasteSBBroadcaster::IsValid () const 168254721Semaste{ 169254721Semaste return m_opaque_ptr != NULL; 170254721Semaste} 171254721Semaste 172254721Semastevoid 173254721SemasteSBBroadcaster::Clear () 174254721Semaste{ 175254721Semaste m_opaque_sp.reset(); 176254721Semaste m_opaque_ptr = NULL; 177254721Semaste} 178254721Semaste 179254721Semastebool 180254721SemasteSBBroadcaster::operator == (const SBBroadcaster &rhs) const 181254721Semaste{ 182254721Semaste return m_opaque_ptr == rhs.m_opaque_ptr; 183254721Semaste 184254721Semaste} 185254721Semaste 186254721Semastebool 187254721SemasteSBBroadcaster::operator != (const SBBroadcaster &rhs) const 188254721Semaste{ 189254721Semaste return m_opaque_ptr != rhs.m_opaque_ptr; 190254721Semaste} 191254721Semaste 192254721Semastebool 193254721SemasteSBBroadcaster::operator < (const SBBroadcaster &rhs) const 194254721Semaste{ 195254721Semaste return m_opaque_ptr < rhs.m_opaque_ptr; 196254721Semaste} 197