SBBroadcaster.cpp revision 61ba7ec20f616f907473dd501341cef5b47fa3f8
1//===-- SBBroadcaster.cpp ---------------------------------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#include "lldb/Core/Broadcaster.h" 11#include "lldb/Core/Log.h" 12#include "lldb/lldb-forward-rtti.h" 13 14#include "lldb/API/SBBroadcaster.h" 15#include "lldb/API/SBListener.h" 16#include "lldb/API/SBEvent.h" 17 18using namespace lldb; 19using namespace lldb_private; 20 21 22SBBroadcaster::SBBroadcaster () : 23 m_opaque (NULL), 24 m_opaque_owned (false) 25{ 26 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API | LIBLLDB_LOG_VERBOSE); 27 28 if (log) 29 log->Printf ("SBBroadcastetr::SBBroadcaster () => this = %p", this); 30} 31 32 33SBBroadcaster::SBBroadcaster (const char *name) : 34 m_opaque (new Broadcaster (name)), 35 m_opaque_owned (true) 36{ 37 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API | LIBLLDB_LOG_VERBOSE); 38 39 if (log) 40 log->Printf ("SBBroadcaster::SBBroadcaster (name='%s') => this = %p (m_opaque = %p)", 41 name, this, m_opaque); 42} 43 44SBBroadcaster::SBBroadcaster (lldb_private::Broadcaster *broadcaster, bool owns) : 45 m_opaque (broadcaster), 46 m_opaque_owned (owns) 47{ 48 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API | LIBLLDB_LOG_VERBOSE); 49 50 if (log) 51 log->Printf ("SBBroadcaster::SBBroadcaster (broadcaster=%p, bool owns='%s') " 52 " => this = %p (m_opaque = %p)", broadcaster, (owns ? "true" : "false"), this, m_opaque); 53} 54 55SBBroadcaster::~SBBroadcaster() 56{ 57 reset (NULL, false); 58} 59 60void 61SBBroadcaster::BroadcastEventByType (uint32_t event_type, bool unique) 62{ 63 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 64 65 if (log) 66 log->Printf ("SBBroadcaster::BroadcastEventByType (%d, %s)", event_type, (unique ? "true" : "false")); 67 68 if (m_opaque == NULL) 69 return; 70 71 if (unique) 72 m_opaque->BroadcastEventIfUnique (event_type); 73 else 74 m_opaque->BroadcastEvent (event_type); 75} 76 77void 78SBBroadcaster::BroadcastEvent (const SBEvent &event, bool unique) 79{ 80 if (m_opaque == NULL) 81 return; 82 83 EventSP event_sp = event.GetSP (); 84 if (unique) 85 m_opaque->BroadcastEventIfUnique (event_sp); 86 else 87 m_opaque->BroadcastEvent (event_sp); 88} 89 90void 91SBBroadcaster::AddInitialEventsToListener (const SBListener &listener, uint32_t requested_events) 92{ 93 if (m_opaque) 94 m_opaque->AddInitialEventsToListener (listener.get(), requested_events); 95} 96 97uint32_t 98SBBroadcaster::AddListener (const SBListener &listener, uint32_t event_mask) 99{ 100 if (m_opaque) 101 return m_opaque->AddListener (listener.get(), event_mask); 102 return 0; 103} 104 105const char * 106SBBroadcaster::GetName () 107{ 108 if (m_opaque) 109 return m_opaque->GetBroadcasterName().AsCString(); 110 return NULL; 111} 112 113bool 114SBBroadcaster::EventTypeHasListeners (uint32_t event_type) 115{ 116 if (m_opaque) 117 return m_opaque->EventTypeHasListeners (event_type); 118 return false; 119} 120 121bool 122SBBroadcaster::RemoveListener (const SBListener &listener, uint32_t event_mask) 123{ 124 if (m_opaque) 125 return m_opaque->RemoveListener (listener.get(), event_mask); 126 return false; 127} 128 129Broadcaster * 130SBBroadcaster::get () const 131{ 132 return m_opaque; 133} 134 135void 136SBBroadcaster::reset (Broadcaster *broadcaster, bool owns) 137{ 138 if (m_opaque && m_opaque_owned) 139 delete m_opaque; 140 m_opaque = broadcaster; 141 m_opaque_owned = owns; 142} 143 144 145bool 146SBBroadcaster::IsValid () const 147{ 148 return m_opaque != NULL; 149} 150 151bool 152SBBroadcaster::operator == (const SBBroadcaster &rhs) const 153{ 154 return m_opaque == rhs.m_opaque; 155 156} 157 158bool 159SBBroadcaster::operator != (const SBBroadcaster &rhs) const 160{ 161 return m_opaque != rhs.m_opaque; 162} 163