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/lldb-forward-rtti.h" 12 13 #include "SBBroadcaster.h" 14 #include "SBListener.h" 15 #include "SBEvent.h" 16 17 using namespace lldb; 18 using namespace lldb_private; 19 20 21 SBBroadcaster::SBBroadcaster () : 22 m_lldb_object (NULL), 23 m_lldb_object_owned (false) 24 { 25 } 26 27 28 SBBroadcaster::SBBroadcaster (const char *name) : 29 m_lldb_object (new Broadcaster (name)), 30 m_lldb_object_owned (true) 31 { 32 } 33 34 SBBroadcaster::SBBroadcaster (lldb_private::Broadcaster *broadcaster, bool owns) : 35 m_lldb_object (broadcaster), 36 m_lldb_object_owned (owns) 37 { 38 } 39 40 SBBroadcaster::~SBBroadcaster() 41 { 42 SetLLDBObjectPtr (NULL, false); 43 } 44 45 void 46 SBBroadcaster::BroadcastEventByType (uint32_t event_type, bool unique) 47 { 48 if (m_lldb_object == NULL) 49 return; 50 51 if (unique) 52 m_lldb_object->BroadcastEventIfUnique (event_type); 53 else 54 m_lldb_object->BroadcastEvent (event_type); 55 } 56 57 void 58 SBBroadcaster::BroadcastEvent (const SBEvent &event, bool unique) 59 { 60 if (m_lldb_object == NULL) 61 return; 62 63 EventSP event_sp = event.GetSharedPtr (); 64 if (unique) 65 m_lldb_object->BroadcastEventIfUnique (event_sp); 66 else 67 m_lldb_object->BroadcastEvent (event_sp); 68 } 69 70 void 71 SBBroadcaster::AddInitialEventsToListener (const SBListener &listener, uint32_t requested_events) 72 { 73 if (m_lldb_object) 74 m_lldb_object->AddInitialEventsToListener (listener.get(), requested_events); 75 } 76 77 uint32_t 78 SBBroadcaster::AddListener (const SBListener &listener, uint32_t event_mask) 79 { 80 if (m_lldb_object) 81 return m_lldb_object->AddListener (listener.get(), event_mask); 82 return 0; 83 } 84 85 const char * 86 SBBroadcaster::GetName () 87 { 88 if (m_lldb_object) 89 return m_lldb_object->GetBroadcasterName().AsCString(); 90 return NULL; 91 } 92 93 bool 94 SBBroadcaster::EventTypeHasListeners (uint32_t event_type) 95 { 96 if (m_lldb_object) 97 return m_lldb_object->EventTypeHasListeners (event_type); 98 return false; 99 } 100 101 bool 102 SBBroadcaster::RemoveListener (const SBListener &listener, uint32_t event_mask) 103 { 104 if (m_lldb_object) 105 return m_lldb_object->RemoveListener (listener.get(), event_mask); 106 return false; 107 } 108 109 Broadcaster * 110 SBBroadcaster::GetLLDBObjectPtr () const 111 { 112 return m_lldb_object; 113 } 114 115 void 116 SBBroadcaster::SetLLDBObjectPtr (Broadcaster *broadcaster, bool owns) 117 { 118 if (m_lldb_object && m_lldb_object_owned) 119 delete m_lldb_object; 120 m_lldb_object = broadcaster; 121 m_lldb_object_owned = owns; 122 } 123 124 125 bool 126 SBBroadcaster::IsValid () const 127 { 128 return m_lldb_object != NULL; 129 } 130 131 bool 132 SBBroadcaster::operator == (const SBBroadcaster &rhs) const 133 { 134 return m_lldb_object == rhs.m_lldb_object; 135 136 } 137 138 bool 139 SBBroadcaster::operator != (const SBBroadcaster &rhs) const 140 { 141 return m_lldb_object != rhs.m_lldb_object; 142 } 143