summaryrefslogtreecommitdiffstats
path: root/lldb/source/API/SBListener.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/API/SBListener.cpp')
-rw-r--r--lldb/source/API/SBListener.cpp299
1 files changed, 299 insertions, 0 deletions
diff --git a/lldb/source/API/SBListener.cpp b/lldb/source/API/SBListener.cpp
new file mode 100644
index 00000000000..6f2cf7bc911
--- /dev/null
+++ b/lldb/source/API/SBListener.cpp
@@ -0,0 +1,299 @@
+//===-- SBListener.cpp ------------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "lldb/Core/Listener.h"
+#include "lldb/lldb-forward-rtti.h"
+#include "lldb/Host/TimeValue.h"
+
+#include "SBListener.h"
+#include "SBEvent.h"
+#include "SBBroadcaster.h"
+
+using namespace lldb;
+using namespace lldb_private;
+
+
+SBListener::SBListener ()
+{
+}
+
+SBListener::SBListener (const char *name) :
+ m_lldb_object_ptr (new Listener (name)),
+ m_lldb_object_ptr_owned (true)
+{
+}
+
+SBListener::SBListener (Listener &listener) :
+ m_lldb_object_ptr (&listener),
+ m_lldb_object_ptr_owned (false)
+{
+}
+
+SBListener::~SBListener ()
+{
+ if (m_lldb_object_ptr_owned)
+ {
+ if (m_lldb_object_ptr)
+ {
+ delete m_lldb_object_ptr;
+ m_lldb_object_ptr = NULL;
+ }
+ }
+}
+
+bool
+SBListener::IsValid() const
+{
+ return m_lldb_object_ptr != NULL;
+}
+
+void
+SBListener::AddEvent (const SBEvent &event)
+{
+ EventSP &event_sp = event.GetSharedPtr ();
+ if (event_sp)
+ m_lldb_object_ptr->AddEvent (event_sp);
+}
+
+void
+SBListener::Clear ()
+{
+ if (IsValid())
+ m_lldb_object_ptr->Clear ();
+}
+
+uint32_t
+SBListener::StartListeningForEvents (const SBBroadcaster& broadcaster, uint32_t event_mask)
+{
+ if (IsValid() && broadcaster.IsValid())
+ {
+ return m_lldb_object_ptr->StartListeningForEvents (broadcaster.GetLLDBObjectPtr (), event_mask);
+ }
+ return false;
+}
+
+bool
+SBListener::StopListeningForEvents (const SBBroadcaster& broadcaster, uint32_t event_mask)
+{
+ if (IsValid() && broadcaster.IsValid())
+ {
+ return m_lldb_object_ptr->StopListeningForEvents (broadcaster.GetLLDBObjectPtr (), event_mask);
+ }
+ return false;
+}
+
+bool
+SBListener::WaitForEvent (uint32_t num_seconds, SBEvent &event)
+{
+ if (IsValid())
+ {
+ TimeValue time_value;
+ if (num_seconds != UINT32_MAX)
+ {
+ assert (num_seconds != 0); // Take this out after all calls with timeout set to zero have been removed....
+ time_value = TimeValue::Now();
+ time_value.OffsetWithSeconds (num_seconds);
+ }
+ EventSP event_sp;
+ if (m_lldb_object_ptr->WaitForEvent (time_value.IsValid() ? &time_value : NULL, event_sp))
+ {
+ event.SetEventSP (event_sp);
+ return true;
+ }
+ }
+ event.SetLLDBObjectPtr (NULL);
+ return false;
+}
+
+bool
+SBListener::WaitForEventForBroadcaster
+(
+ uint32_t num_seconds,
+ const SBBroadcaster &broadcaster,
+ SBEvent &event
+)
+{
+ if (IsValid() && broadcaster.IsValid())
+ {
+ TimeValue time_value;
+ if (num_seconds != UINT32_MAX)
+ {
+ time_value = TimeValue::Now();
+ time_value.OffsetWithSeconds (num_seconds);
+ }
+ EventSP event_sp;
+ if (m_lldb_object_ptr->WaitForEventForBroadcaster (time_value.IsValid() ? &time_value : NULL,
+ broadcaster.GetLLDBObjectPtr (),
+ event_sp))
+ {
+ event.SetEventSP (event_sp);
+ return true;
+ }
+
+ }
+ event.SetLLDBObjectPtr (NULL);
+ return false;
+}
+
+bool
+SBListener::WaitForEventForBroadcasterWithType
+(
+ uint32_t num_seconds,
+ const SBBroadcaster &broadcaster,
+ uint32_t event_type_mask,
+ SBEvent &event
+)
+{
+ if (IsValid() && broadcaster.IsValid())
+ {
+ TimeValue time_value;
+ if (num_seconds != UINT32_MAX)
+ {
+ time_value = TimeValue::Now();
+ time_value.OffsetWithSeconds (num_seconds);
+ }
+ EventSP event_sp;
+ if (m_lldb_object_ptr->WaitForEventForBroadcasterWithType (time_value.IsValid() ? &time_value : NULL,
+ broadcaster.GetLLDBObjectPtr (),
+ event_type_mask,
+ event_sp))
+ {
+ event.SetEventSP (event_sp);
+ return true;
+ }
+ }
+ event.SetLLDBObjectPtr (NULL);
+ return false;
+}
+
+bool
+SBListener::PeekAtNextEvent (SBEvent &event)
+{
+ if (m_lldb_object_ptr)
+ {
+ event.SetLLDBObjectPtr (m_lldb_object_ptr->PeekAtNextEvent ());
+ return event.IsValid();
+ }
+ event.SetLLDBObjectPtr (NULL);
+ return false;
+}
+
+bool
+SBListener::PeekAtNextEventForBroadcaster (const SBBroadcaster &broadcaster, SBEvent &event)
+{
+ if (IsValid() && broadcaster.IsValid())
+ {
+ event.SetLLDBObjectPtr (m_lldb_object_ptr->PeekAtNextEventForBroadcaster (broadcaster.GetLLDBObjectPtr ()));
+ return event.IsValid();
+ }
+ event.SetLLDBObjectPtr (NULL);
+ return false;
+}
+
+bool
+SBListener::PeekAtNextEventForBroadcasterWithType (const SBBroadcaster &broadcaster, uint32_t event_type_mask,
+ SBEvent &event)
+{
+ if (IsValid() && broadcaster.IsValid())
+ {
+ event.SetLLDBObjectPtr(m_lldb_object_ptr->PeekAtNextEventForBroadcasterWithType (broadcaster.GetLLDBObjectPtr (), event_type_mask));
+ return event.IsValid();
+ }
+ event.SetLLDBObjectPtr (NULL);
+ return false;
+}
+
+bool
+SBListener::GetNextEvent (SBEvent &event)
+{
+ if (m_lldb_object_ptr)
+ {
+ EventSP event_sp;
+ if (m_lldb_object_ptr->GetNextEvent (event_sp))
+ {
+ event.SetEventSP (event_sp);
+ return true;
+ }
+ }
+ event.SetLLDBObjectPtr (NULL);
+ return false;
+}
+
+bool
+SBListener::GetNextEventForBroadcaster (const SBBroadcaster &broadcaster, SBEvent &event)
+{
+ if (IsValid() && broadcaster.IsValid())
+ {
+ EventSP event_sp;
+ if (m_lldb_object_ptr->GetNextEventForBroadcaster (broadcaster.GetLLDBObjectPtr (), event_sp))
+ {
+ event.SetEventSP (event_sp);
+ return true;
+ }
+ }
+ event.SetLLDBObjectPtr (NULL);
+ return false;
+}
+
+bool
+SBListener::GetNextEventForBroadcasterWithType
+(
+ const SBBroadcaster &broadcaster,
+ uint32_t event_type_mask,
+ SBEvent &event
+)
+{
+ if (IsValid() && broadcaster.IsValid())
+ {
+ EventSP event_sp;
+ if (m_lldb_object_ptr->GetNextEventForBroadcasterWithType (broadcaster.GetLLDBObjectPtr (),
+ event_type_mask,
+ event_sp))
+ {
+ event.SetEventSP (event_sp);
+ return true;
+ }
+ }
+ event.SetLLDBObjectPtr (NULL);
+ return false;
+}
+
+bool
+SBListener::HandleBroadcastEvent (const SBEvent &event)
+{
+ if (m_lldb_object_ptr)
+ return m_lldb_object_ptr->HandleBroadcastEvent (event.GetSharedPtr());
+ return false;
+}
+
+lldb_private::Listener *
+SBListener::operator->() const
+{
+ return m_lldb_object_ptr;
+}
+
+lldb_private::Listener *
+SBListener::get() const
+{
+ return m_lldb_object_ptr;
+}
+
+lldb_private::Listener &
+SBListener::operator *()
+{
+ return *m_lldb_object_ptr;
+}
+
+const lldb_private::Listener &
+SBListener::operator *() const
+{
+ return *m_lldb_object_ptr;
+}
+
+
OpenPOWER on IntegriCloud