SBListener.cpp revision 7a62c8b129b7e1b5e838b7616a794e01df01818b
1//===-- SBListener.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/Listener.h" 11#include "lldb/lldb-forward-rtti.h" 12#include "lldb/Host/TimeValue.h" 13 14#include "lldb/API/SBListener.h" 15#include "lldb/API/SBEvent.h" 16#include "lldb/API/SBBroadcaster.h" 17 18using namespace lldb; 19using namespace lldb_private; 20 21 22SBListener::SBListener () 23{ 24} 25 26SBListener::SBListener (const char *name) : 27 m_lldb_object_ptr (new Listener (name)), 28 m_lldb_object_ptr_owned (true) 29{ 30} 31 32SBListener::SBListener (Listener &listener) : 33 m_lldb_object_ptr (&listener), 34 m_lldb_object_ptr_owned (false) 35{ 36} 37 38SBListener::~SBListener () 39{ 40 if (m_lldb_object_ptr_owned) 41 { 42 if (m_lldb_object_ptr) 43 { 44 delete m_lldb_object_ptr; 45 m_lldb_object_ptr = NULL; 46 } 47 } 48} 49 50bool 51SBListener::IsValid() const 52{ 53 return m_lldb_object_ptr != NULL; 54} 55 56void 57SBListener::AddEvent (const SBEvent &event) 58{ 59 EventSP &event_sp = event.GetSharedPtr (); 60 if (event_sp) 61 m_lldb_object_ptr->AddEvent (event_sp); 62} 63 64void 65SBListener::Clear () 66{ 67 if (IsValid()) 68 m_lldb_object_ptr->Clear (); 69} 70 71uint32_t 72SBListener::StartListeningForEvents (const SBBroadcaster& broadcaster, uint32_t event_mask) 73{ 74 if (IsValid() && broadcaster.IsValid()) 75 { 76 return m_lldb_object_ptr->StartListeningForEvents (broadcaster.GetLLDBObjectPtr (), event_mask); 77 } 78 return false; 79} 80 81bool 82SBListener::StopListeningForEvents (const SBBroadcaster& broadcaster, uint32_t event_mask) 83{ 84 if (IsValid() && broadcaster.IsValid()) 85 { 86 return m_lldb_object_ptr->StopListeningForEvents (broadcaster.GetLLDBObjectPtr (), event_mask); 87 } 88 return false; 89} 90 91bool 92SBListener::WaitForEvent (uint32_t num_seconds, SBEvent &event) 93{ 94 if (IsValid()) 95 { 96 TimeValue time_value; 97 if (num_seconds != UINT32_MAX) 98 { 99 assert (num_seconds != 0); // Take this out after all calls with timeout set to zero have been removed.... 100 time_value = TimeValue::Now(); 101 time_value.OffsetWithSeconds (num_seconds); 102 } 103 EventSP event_sp; 104 if (m_lldb_object_ptr->WaitForEvent (time_value.IsValid() ? &time_value : NULL, event_sp)) 105 { 106 event.SetEventSP (event_sp); 107 return true; 108 } 109 } 110 event.SetLLDBObjectPtr (NULL); 111 return false; 112} 113 114bool 115SBListener::WaitForEventForBroadcaster 116( 117 uint32_t num_seconds, 118 const SBBroadcaster &broadcaster, 119 SBEvent &event 120) 121{ 122 if (IsValid() && broadcaster.IsValid()) 123 { 124 TimeValue time_value; 125 if (num_seconds != UINT32_MAX) 126 { 127 time_value = TimeValue::Now(); 128 time_value.OffsetWithSeconds (num_seconds); 129 } 130 EventSP event_sp; 131 if (m_lldb_object_ptr->WaitForEventForBroadcaster (time_value.IsValid() ? &time_value : NULL, 132 broadcaster.GetLLDBObjectPtr (), 133 event_sp)) 134 { 135 event.SetEventSP (event_sp); 136 return true; 137 } 138 139 } 140 event.SetLLDBObjectPtr (NULL); 141 return false; 142} 143 144bool 145SBListener::WaitForEventForBroadcasterWithType 146( 147 uint32_t num_seconds, 148 const SBBroadcaster &broadcaster, 149 uint32_t event_type_mask, 150 SBEvent &event 151) 152{ 153 if (IsValid() && broadcaster.IsValid()) 154 { 155 TimeValue time_value; 156 if (num_seconds != UINT32_MAX) 157 { 158 time_value = TimeValue::Now(); 159 time_value.OffsetWithSeconds (num_seconds); 160 } 161 EventSP event_sp; 162 if (m_lldb_object_ptr->WaitForEventForBroadcasterWithType (time_value.IsValid() ? &time_value : NULL, 163 broadcaster.GetLLDBObjectPtr (), 164 event_type_mask, 165 event_sp)) 166 { 167 event.SetEventSP (event_sp); 168 return true; 169 } 170 } 171 event.SetLLDBObjectPtr (NULL); 172 return false; 173} 174 175bool 176SBListener::PeekAtNextEvent (SBEvent &event) 177{ 178 if (m_lldb_object_ptr) 179 { 180 event.SetLLDBObjectPtr (m_lldb_object_ptr->PeekAtNextEvent ()); 181 return event.IsValid(); 182 } 183 event.SetLLDBObjectPtr (NULL); 184 return false; 185} 186 187bool 188SBListener::PeekAtNextEventForBroadcaster (const SBBroadcaster &broadcaster, SBEvent &event) 189{ 190 if (IsValid() && broadcaster.IsValid()) 191 { 192 event.SetLLDBObjectPtr (m_lldb_object_ptr->PeekAtNextEventForBroadcaster (broadcaster.GetLLDBObjectPtr ())); 193 return event.IsValid(); 194 } 195 event.SetLLDBObjectPtr (NULL); 196 return false; 197} 198 199bool 200SBListener::PeekAtNextEventForBroadcasterWithType (const SBBroadcaster &broadcaster, uint32_t event_type_mask, 201 SBEvent &event) 202{ 203 if (IsValid() && broadcaster.IsValid()) 204 { 205 event.SetLLDBObjectPtr(m_lldb_object_ptr->PeekAtNextEventForBroadcasterWithType (broadcaster.GetLLDBObjectPtr (), event_type_mask)); 206 return event.IsValid(); 207 } 208 event.SetLLDBObjectPtr (NULL); 209 return false; 210} 211 212bool 213SBListener::GetNextEvent (SBEvent &event) 214{ 215 if (m_lldb_object_ptr) 216 { 217 EventSP event_sp; 218 if (m_lldb_object_ptr->GetNextEvent (event_sp)) 219 { 220 event.SetEventSP (event_sp); 221 return true; 222 } 223 } 224 event.SetLLDBObjectPtr (NULL); 225 return false; 226} 227 228bool 229SBListener::GetNextEventForBroadcaster (const SBBroadcaster &broadcaster, SBEvent &event) 230{ 231 if (IsValid() && broadcaster.IsValid()) 232 { 233 EventSP event_sp; 234 if (m_lldb_object_ptr->GetNextEventForBroadcaster (broadcaster.GetLLDBObjectPtr (), event_sp)) 235 { 236 event.SetEventSP (event_sp); 237 return true; 238 } 239 } 240 event.SetLLDBObjectPtr (NULL); 241 return false; 242} 243 244bool 245SBListener::GetNextEventForBroadcasterWithType 246( 247 const SBBroadcaster &broadcaster, 248 uint32_t event_type_mask, 249 SBEvent &event 250) 251{ 252 if (IsValid() && broadcaster.IsValid()) 253 { 254 EventSP event_sp; 255 if (m_lldb_object_ptr->GetNextEventForBroadcasterWithType (broadcaster.GetLLDBObjectPtr (), 256 event_type_mask, 257 event_sp)) 258 { 259 event.SetEventSP (event_sp); 260 return true; 261 } 262 } 263 event.SetLLDBObjectPtr (NULL); 264 return false; 265} 266 267bool 268SBListener::HandleBroadcastEvent (const SBEvent &event) 269{ 270 if (m_lldb_object_ptr) 271 return m_lldb_object_ptr->HandleBroadcastEvent (event.GetSharedPtr()); 272 return false; 273} 274 275lldb_private::Listener * 276SBListener::operator->() const 277{ 278 return m_lldb_object_ptr; 279} 280 281lldb_private::Listener * 282SBListener::get() const 283{ 284 return m_lldb_object_ptr; 285} 286 287lldb_private::Listener & 288SBListener::operator *() 289{ 290 return *m_lldb_object_ptr; 291} 292 293const lldb_private::Listener & 294SBListener::operator *() const 295{ 296 return *m_lldb_object_ptr; 297} 298 299 300