SBListener.cpp revision 5a15e6927b5b3234fb3e688717297ba6b5dd6ad7
124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- SBListener.cpp ------------------------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1049ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton#include "lldb/API/SBListener.h" 1149ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton#include "lldb/API/SBBroadcaster.h" 125a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham#include "lldb/API/SBDebugger.h" 1349ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton#include "lldb/API/SBEvent.h" 1449ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton#include "lldb/API/SBStream.h" 1549ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton#include "lldb/Core/Broadcaster.h" 165a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham#include "lldb/Core/Debugger.h" 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Listener.h" 187826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice#include "lldb/Core/Log.h" 1949ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton#include "lldb/Core/StreamString.h" 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Host/TimeValue.h" 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb; 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb_private; 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2763094e0bb161580564954dee512955c1c79d3476Greg ClaytonSBListener::SBListener () : 28538eb82a89a68dbc57251915080bd5152b333978Greg Clayton m_opaque_sp (), 29538eb82a89a68dbc57251915080bd5152b333978Greg Clayton m_opaque_ptr (NULL) 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBListener::SBListener (const char *name) : 34538eb82a89a68dbc57251915080bd5152b333978Greg Clayton m_opaque_sp (new Listener (name)), 35538eb82a89a68dbc57251915080bd5152b333978Greg Clayton m_opaque_ptr (NULL) 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 37538eb82a89a68dbc57251915080bd5152b333978Greg Clayton m_opaque_ptr = m_opaque_sp.get(); 38538eb82a89a68dbc57251915080bd5152b333978Greg Clayton 39e005f2ce03c489ebde9110678a29cbfe8488d5b4Greg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 407826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 417826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 4249ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton log->Printf ("SBListener::SBListener (name=\"%s\") => SBListener(%p)", 4361ba7ec20f616f907473dd501341cef5b47fa3f8Caroline Tice name, m_opaque_ptr); 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 46538eb82a89a68dbc57251915080bd5152b333978Greg Clayton 47538eb82a89a68dbc57251915080bd5152b333978Greg ClaytonSBListener::SBListener (const SBListener &rhs) : 48538eb82a89a68dbc57251915080bd5152b333978Greg Clayton m_opaque_sp (rhs.m_opaque_sp), 49538eb82a89a68dbc57251915080bd5152b333978Greg Clayton m_opaque_ptr (rhs.m_opaque_ptr) 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 53538eb82a89a68dbc57251915080bd5152b333978Greg Claytonconst lldb::SBListener & 54538eb82a89a68dbc57251915080bd5152b333978Greg ClaytonSBListener::operator = (const lldb::SBListener &rhs) 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 56538eb82a89a68dbc57251915080bd5152b333978Greg Clayton if (this != &rhs) 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 58538eb82a89a68dbc57251915080bd5152b333978Greg Clayton m_opaque_sp = rhs.m_opaque_sp; 59538eb82a89a68dbc57251915080bd5152b333978Greg Clayton m_opaque_ptr = rhs.m_opaque_ptr; 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 61538eb82a89a68dbc57251915080bd5152b333978Greg Clayton return *this; 62538eb82a89a68dbc57251915080bd5152b333978Greg Clayton} 63538eb82a89a68dbc57251915080bd5152b333978Greg Clayton 64538eb82a89a68dbc57251915080bd5152b333978Greg ClaytonSBListener::SBListener (Listener &listener) : 65538eb82a89a68dbc57251915080bd5152b333978Greg Clayton m_opaque_sp (), 66538eb82a89a68dbc57251915080bd5152b333978Greg Clayton m_opaque_ptr (&listener) 67538eb82a89a68dbc57251915080bd5152b333978Greg Clayton{ 68538eb82a89a68dbc57251915080bd5152b333978Greg Clayton} 69538eb82a89a68dbc57251915080bd5152b333978Greg Clayton 70538eb82a89a68dbc57251915080bd5152b333978Greg ClaytonSBListener::~SBListener () 71538eb82a89a68dbc57251915080bd5152b333978Greg Clayton{ 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBListener::IsValid() const 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 7763094e0bb161580564954dee512955c1c79d3476Greg Clayton return m_opaque_ptr != NULL; 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBListener::AddEvent (const SBEvent &event) 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 8363094e0bb161580564954dee512955c1c79d3476Greg Clayton EventSP &event_sp = event.GetSP (); 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (event_sp) 8563094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_ptr->AddEvent (event_sp); 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBListener::Clear () 9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 9163094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ptr) 9263094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_ptr->Clear (); 9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 955a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham uint32_t 965a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham SBListener::StartListeningForEventClass (SBDebugger &debugger, 975a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham const char *broadcaster_class, 985a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham uint32_t event_mask) 995a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham { 1005a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham if (m_opaque_ptr) 1015a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham { 1025a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham Debugger *lldb_debugger = debugger.get(); 1035a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham if (!lldb_debugger) 1045a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham return 0; 1055a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham BroadcastEventSpec event_spec (ConstString (broadcaster_class), event_mask); 1065a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham return m_opaque_ptr->StartListeningForEventSpec (*lldb_debugger, event_spec); 1075a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham } 1085a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham else 1095a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham return 0; 1105a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham } 1115a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham 1125a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham bool 1135a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham SBListener::StopListeningForEventClass (SBDebugger &debugger, 1145a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham const char *broadcaster_class, 1155a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham uint32_t event_mask) 1165a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham { 1175a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham if (m_opaque_ptr) 1185a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham { 1195a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham Debugger *lldb_debugger = debugger.get(); 1205a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham if (!lldb_debugger) 1215a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham return false; 1225a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham BroadcastEventSpec event_spec (ConstString (broadcaster_class), event_mask); 1235a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham return m_opaque_ptr->StopListeningForEventSpec (*lldb_debugger, event_spec); 1245a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham } 1255a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham else 1265a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham return false; 1275a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham } 1285a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham 12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattneruint32_t 13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBListener::StartListeningForEvents (const SBBroadcaster& broadcaster, uint32_t event_mask) 13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 132e005f2ce03c489ebde9110678a29cbfe8488d5b4Greg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 1337826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 13449ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton uint32_t acquired_event_mask = 0; 13563094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ptr && broadcaster.IsValid()) 13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 13749ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton acquired_event_mask = m_opaque_ptr->StartListeningForEvents (broadcaster.get(), event_mask); 13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 1397826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 140926060e198137f8a64face70455324a8cd4362a5Caroline Tice log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 1417826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 14249ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton { 14349ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton StreamString sstr_requested; 14449ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton StreamString sstr_acquired; 14549ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton 14649ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton Broadcaster *lldb_broadcaster = broadcaster.get(); 14749ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton if (lldb_broadcaster) 14849ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton { 14949ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton const bool got_requested_names = lldb_broadcaster->GetEventNames (sstr_requested, event_mask, false); 15049ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton const bool got_acquired_names = lldb_broadcaster->GetEventNames (sstr_acquired, acquired_event_mask, false); 15149ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton log->Printf ("SBListener(%p)::StartListeneingForEvents (SBBroadcaster(%p): %s, event_mask=0x%8.8x%s%s%s) => 0x%8.8x%s%s%s", 15249ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton m_opaque_ptr, 15349ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton lldb_broadcaster, 15449ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton lldb_broadcaster->GetBroadcasterName().GetCString(), 15549ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton event_mask, 15649ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton got_requested_names ? " (" : "", 15749ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton sstr_requested.GetData(), 15849ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton got_requested_names ? ")" : "", 15949ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton acquired_event_mask, 16049ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton got_acquired_names ? " (" : "", 16149ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton sstr_acquired.GetData(), 16249ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton got_acquired_names ? ")" : ""); 16349ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton } 16449ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton else 16549ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton { 16649ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton log->Printf ("SBListener(%p)::StartListeneingForEvents (SBBroadcaster(%p), event_mask=0x%8.8x) => 0x%8.8x", 16749ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton m_opaque_ptr, 16849ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton lldb_broadcaster, 16949ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton event_mask, 17049ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton acquired_event_mask); 17149ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton 17249ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton } 17349ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton } 1747826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 17549ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton return acquired_event_mask; 17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBListener::StopListeningForEvents (const SBBroadcaster& broadcaster, uint32_t event_mask) 18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 18163094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ptr && broadcaster.IsValid()) 18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 18363094e0bb161580564954dee512955c1c79d3476Greg Clayton return m_opaque_ptr->StopListeningForEvents (broadcaster.get(), event_mask); 18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 18949ce682dfa7993d31206cea19ce7006cd3f3077eGreg ClaytonSBListener::WaitForEvent (uint32_t timeout_secs, SBEvent &event) 19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 191e005f2ce03c489ebde9110678a29cbfe8488d5b4Greg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 19249ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton if (log) 19349ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton { 19449ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton if (timeout_secs == UINT32_MAX) 19549ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton { 19649ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton log->Printf ("SBListener(%p)::WaitForEvent (timeout_secs=INFINITE, SBEvent(%p))...", 19749ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton m_opaque_ptr, event.get()); 19849ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton } 19949ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton else 20049ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton { 20149ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton log->Printf ("SBListener(%p)::WaitForEvent (timeout_secs=%d, SBEvent(%p))...", 20249ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton m_opaque_ptr, timeout_secs, event.get()); 20349ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton } 20449ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton } 20549ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton bool success = false; 2067826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 20763094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ptr) 20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 20924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner TimeValue time_value; 21049ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton if (timeout_secs != UINT32_MAX) 21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 21249ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton assert (timeout_secs != 0); // Take this out after all calls with timeout set to zero have been removed.... 21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner time_value = TimeValue::Now(); 21449ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton time_value.OffsetWithSeconds (timeout_secs); 21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner EventSP event_sp; 21763094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ptr->WaitForEvent (time_value.IsValid() ? &time_value : NULL, event_sp)) 21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 21963094e0bb161580564954dee512955c1c79d3476Greg Clayton event.reset (event_sp); 22049ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton success = true; 22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 22224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 2237826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 2247826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 22549ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton { 22649ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton if (timeout_secs == UINT32_MAX) 22749ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton { 22849ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton log->Printf ("SBListener(%p)::WaitForEvent (timeout_secs=INFINITE, SBEvent(%p)) => %i", 22949ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton m_opaque_ptr, event.get(), success); 23049ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton } 23149ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton else 23249ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton { 23349ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton log->Printf ("SBListener(%p)::WaitForEvent (timeout_secs=%d, SBEvent(%p)) => %i", 23449ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton m_opaque_ptr, timeout_secs, event.get(), success); 23549ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton } 23649ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton } 23749ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton if (!success) 23849ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton event.reset (NULL); 23949ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton return success; 24024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 24124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 24224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 24324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBListener::WaitForEventForBroadcaster 24424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner( 24524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t num_seconds, 24624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const SBBroadcaster &broadcaster, 24724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBEvent &event 24824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner) 24924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 25063094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ptr && broadcaster.IsValid()) 25124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 25224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner TimeValue time_value; 25324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (num_seconds != UINT32_MAX) 25424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 25524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner time_value = TimeValue::Now(); 25624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner time_value.OffsetWithSeconds (num_seconds); 25724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 25824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner EventSP event_sp; 25963094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ptr->WaitForEventForBroadcaster (time_value.IsValid() ? &time_value : NULL, 26063094e0bb161580564954dee512955c1c79d3476Greg Clayton broadcaster.get(), 26124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner event_sp)) 26224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 26363094e0bb161580564954dee512955c1c79d3476Greg Clayton event.reset (event_sp); 26424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return true; 26524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 26624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 26724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 26863094e0bb161580564954dee512955c1c79d3476Greg Clayton event.reset (NULL); 26924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 27024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 27124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 27224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 27324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBListener::WaitForEventForBroadcasterWithType 27424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner( 27524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t num_seconds, 27624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const SBBroadcaster &broadcaster, 27724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t event_type_mask, 27824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBEvent &event 27924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner) 28024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 28163094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ptr && broadcaster.IsValid()) 28224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 28324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner TimeValue time_value; 28424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (num_seconds != UINT32_MAX) 28524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 28624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner time_value = TimeValue::Now(); 28724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner time_value.OffsetWithSeconds (num_seconds); 28824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 28924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner EventSP event_sp; 29063094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ptr->WaitForEventForBroadcasterWithType (time_value.IsValid() ? &time_value : NULL, 29163094e0bb161580564954dee512955c1c79d3476Greg Clayton broadcaster.get(), 29263094e0bb161580564954dee512955c1c79d3476Greg Clayton event_type_mask, 29363094e0bb161580564954dee512955c1c79d3476Greg Clayton event_sp)) 29424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 29563094e0bb161580564954dee512955c1c79d3476Greg Clayton event.reset (event_sp); 29624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return true; 29724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 29824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 29963094e0bb161580564954dee512955c1c79d3476Greg Clayton event.reset (NULL); 30024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 30124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 30224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 30324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 30424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBListener::PeekAtNextEvent (SBEvent &event) 30524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 30663094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ptr) 30724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 30863094e0bb161580564954dee512955c1c79d3476Greg Clayton event.reset (m_opaque_ptr->PeekAtNextEvent ()); 30924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return event.IsValid(); 31024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 31163094e0bb161580564954dee512955c1c79d3476Greg Clayton event.reset (NULL); 31224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 31324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 31424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 31524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 31624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBListener::PeekAtNextEventForBroadcaster (const SBBroadcaster &broadcaster, SBEvent &event) 31724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 31863094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ptr && broadcaster.IsValid()) 31924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 32063094e0bb161580564954dee512955c1c79d3476Greg Clayton event.reset (m_opaque_ptr->PeekAtNextEventForBroadcaster (broadcaster.get())); 32124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return event.IsValid(); 32224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 32363094e0bb161580564954dee512955c1c79d3476Greg Clayton event.reset (NULL); 32424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 32524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 32624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 32724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 32824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBListener::PeekAtNextEventForBroadcasterWithType (const SBBroadcaster &broadcaster, uint32_t event_type_mask, 32924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBEvent &event) 33024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 33163094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ptr && broadcaster.IsValid()) 33224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 33363094e0bb161580564954dee512955c1c79d3476Greg Clayton event.reset(m_opaque_ptr->PeekAtNextEventForBroadcasterWithType (broadcaster.get(), event_type_mask)); 33424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return event.IsValid(); 33524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 33663094e0bb161580564954dee512955c1c79d3476Greg Clayton event.reset (NULL); 33724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 33824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 33924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 34024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 34124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBListener::GetNextEvent (SBEvent &event) 34224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 34363094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ptr) 34424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 34524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner EventSP event_sp; 34663094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ptr->GetNextEvent (event_sp)) 34724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 34863094e0bb161580564954dee512955c1c79d3476Greg Clayton event.reset (event_sp); 34924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return true; 35024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 35124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 35263094e0bb161580564954dee512955c1c79d3476Greg Clayton event.reset (NULL); 35324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 35424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 35524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 35624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 35724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBListener::GetNextEventForBroadcaster (const SBBroadcaster &broadcaster, SBEvent &event) 35824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 35963094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ptr && broadcaster.IsValid()) 36024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 36124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner EventSP event_sp; 36263094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ptr->GetNextEventForBroadcaster (broadcaster.get(), event_sp)) 36324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 36463094e0bb161580564954dee512955c1c79d3476Greg Clayton event.reset (event_sp); 36524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return true; 36624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 36724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 36863094e0bb161580564954dee512955c1c79d3476Greg Clayton event.reset (NULL); 36924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 37024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 37124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 37224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 37324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBListener::GetNextEventForBroadcasterWithType 37424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner( 37524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const SBBroadcaster &broadcaster, 37624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t event_type_mask, 37724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBEvent &event 37824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner) 37924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 38063094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ptr && broadcaster.IsValid()) 38124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 38224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner EventSP event_sp; 38363094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ptr->GetNextEventForBroadcasterWithType (broadcaster.get(), 38463094e0bb161580564954dee512955c1c79d3476Greg Clayton event_type_mask, 38563094e0bb161580564954dee512955c1c79d3476Greg Clayton event_sp)) 38624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 38763094e0bb161580564954dee512955c1c79d3476Greg Clayton event.reset (event_sp); 38824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return true; 38924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 39024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 39163094e0bb161580564954dee512955c1c79d3476Greg Clayton event.reset (NULL); 39224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 39324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 39424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 39524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 39624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBListener::HandleBroadcastEvent (const SBEvent &event) 39724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 39863094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ptr) 39963094e0bb161580564954dee512955c1c79d3476Greg Clayton return m_opaque_ptr->HandleBroadcastEvent (event.GetSP()); 40024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 40124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 40224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 40363094e0bb161580564954dee512955c1c79d3476Greg ClaytonListener * 40424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBListener::operator->() const 40524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 40663094e0bb161580564954dee512955c1c79d3476Greg Clayton return m_opaque_ptr; 40724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 40824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 40963094e0bb161580564954dee512955c1c79d3476Greg ClaytonListener * 41024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBListener::get() const 41124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 41263094e0bb161580564954dee512955c1c79d3476Greg Clayton return m_opaque_ptr; 41324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 41424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 41563094e0bb161580564954dee512955c1c79d3476Greg Claytonvoid 416538eb82a89a68dbc57251915080bd5152b333978Greg ClaytonSBListener::reset(Listener *listener, bool owns) 41763094e0bb161580564954dee512955c1c79d3476Greg Clayton{ 418538eb82a89a68dbc57251915080bd5152b333978Greg Clayton if (owns) 419538eb82a89a68dbc57251915080bd5152b333978Greg Clayton m_opaque_sp.reset (listener); 420538eb82a89a68dbc57251915080bd5152b333978Greg Clayton else 421538eb82a89a68dbc57251915080bd5152b333978Greg Clayton m_opaque_sp.reset (); 42263094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_ptr = listener; 42363094e0bb161580564954dee512955c1c79d3476Greg Clayton} 42463094e0bb161580564954dee512955c1c79d3476Greg Clayton 425271a5db096ae183e9235ebd273c4a6aab6130b3eGreg ClaytonListener & 426271a5db096ae183e9235ebd273c4a6aab6130b3eGreg ClaytonSBListener::ref() const 427271a5db096ae183e9235ebd273c4a6aab6130b3eGreg Clayton{ 428271a5db096ae183e9235ebd273c4a6aab6130b3eGreg Clayton return *m_opaque_ptr; 429271a5db096ae183e9235ebd273c4a6aab6130b3eGreg Clayton} 43063094e0bb161580564954dee512955c1c79d3476Greg Clayton 43163094e0bb161580564954dee512955c1c79d3476Greg ClaytonListener & 43224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBListener::operator *() 43324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 43463094e0bb161580564954dee512955c1c79d3476Greg Clayton return *m_opaque_ptr; 43524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 43624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 43763094e0bb161580564954dee512955c1c79d3476Greg Claytonconst Listener & 43824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBListener::operator *() const 43924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 44063094e0bb161580564954dee512955c1c79d3476Greg Clayton return *m_opaque_ptr; 44124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 44224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 44324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 444