blob: 348b710bdd85accb5319eda2857e7917e4ce698f [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001//===-- 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"
Caroline Tice7826c882010-10-26 03:11:13 +000011#include "lldb/Core/Log.h"
Chris Lattner24943d22010-06-08 16:52:24 +000012#include "lldb/lldb-forward-rtti.h"
13
Eli Friedmand6ec8aa2010-06-09 07:37:52 +000014#include "lldb/API/SBBroadcaster.h"
15#include "lldb/API/SBListener.h"
16#include "lldb/API/SBEvent.h"
Chris Lattner24943d22010-06-08 16:52:24 +000017
18using namespace lldb;
19using namespace lldb_private;
20
21
22SBBroadcaster::SBBroadcaster () :
Greg Clayton63094e02010-06-23 01:19:29 +000023 m_opaque (NULL),
24 m_opaque_owned (false)
Chris Lattner24943d22010-06-08 16:52:24 +000025{
Caroline Tice7826c882010-10-26 03:11:13 +000026 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API | LIBLLDB_LOG_VERBOSE);
27
28 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +000029 log->Printf ("SBBroadcastetr::SBBroadcaster () => SBBroadcaster(%p)", this);
Chris Lattner24943d22010-06-08 16:52:24 +000030}
31
32
33SBBroadcaster::SBBroadcaster (const char *name) :
Greg Clayton63094e02010-06-23 01:19:29 +000034 m_opaque (new Broadcaster (name)),
35 m_opaque_owned (true)
Chris Lattner24943d22010-06-08 16:52:24 +000036{
Caroline Tice7826c882010-10-26 03:11:13 +000037 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API | LIBLLDB_LOG_VERBOSE);
38
39 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +000040 log->Printf ("SBBroadcaster::SBBroadcaster (name=\"%s\") => SBBroadcaster(%p)",
Greg Clayton3f5ee7f2010-10-29 04:59:35 +000041 name, m_opaque);
Chris Lattner24943d22010-06-08 16:52:24 +000042}
43
44SBBroadcaster::SBBroadcaster (lldb_private::Broadcaster *broadcaster, bool owns) :
Greg Clayton63094e02010-06-23 01:19:29 +000045 m_opaque (broadcaster),
46 m_opaque_owned (owns)
Chris Lattner24943d22010-06-08 16:52:24 +000047{
Caroline Tice7826c882010-10-26 03:11:13 +000048 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API | LIBLLDB_LOG_VERBOSE);
49
50 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +000051 log->Printf ("SBBroadcaster::SBBroadcaster (broadcaster=%p, bool owns=%i) "
52 " => SBBroadcaster(%p)", broadcaster, owns, m_opaque);
Chris Lattner24943d22010-06-08 16:52:24 +000053}
54
55SBBroadcaster::~SBBroadcaster()
56{
Greg Clayton63094e02010-06-23 01:19:29 +000057 reset (NULL, false);
Chris Lattner24943d22010-06-08 16:52:24 +000058}
59
60void
61SBBroadcaster::BroadcastEventByType (uint32_t event_type, bool unique)
62{
Caroline Tice7826c882010-10-26 03:11:13 +000063 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
64
65 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +000066 log->Printf ("SBBroadcaster(%p)::BroadcastEventByType (event_type=0x%8.8x, unique=%i)", m_opaque, event_type, unique);
Caroline Tice7826c882010-10-26 03:11:13 +000067
Greg Clayton63094e02010-06-23 01:19:29 +000068 if (m_opaque == NULL)
Chris Lattner24943d22010-06-08 16:52:24 +000069 return;
70
71 if (unique)
Greg Clayton63094e02010-06-23 01:19:29 +000072 m_opaque->BroadcastEventIfUnique (event_type);
Chris Lattner24943d22010-06-08 16:52:24 +000073 else
Greg Clayton63094e02010-06-23 01:19:29 +000074 m_opaque->BroadcastEvent (event_type);
Chris Lattner24943d22010-06-08 16:52:24 +000075}
76
77void
78SBBroadcaster::BroadcastEvent (const SBEvent &event, bool unique)
79{
Greg Clayton3f5ee7f2010-10-29 04:59:35 +000080 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
81
82 if (log)
83 log->Printf ("SBBroadcaster(%p)::BroadcastEventByType (SBEvent(%p), unique=%i)", m_opaque, event.get(), unique);
84
Greg Clayton63094e02010-06-23 01:19:29 +000085 if (m_opaque == NULL)
Chris Lattner24943d22010-06-08 16:52:24 +000086 return;
87
Greg Clayton63094e02010-06-23 01:19:29 +000088 EventSP event_sp = event.GetSP ();
Chris Lattner24943d22010-06-08 16:52:24 +000089 if (unique)
Greg Clayton63094e02010-06-23 01:19:29 +000090 m_opaque->BroadcastEventIfUnique (event_sp);
Chris Lattner24943d22010-06-08 16:52:24 +000091 else
Greg Clayton63094e02010-06-23 01:19:29 +000092 m_opaque->BroadcastEvent (event_sp);
Chris Lattner24943d22010-06-08 16:52:24 +000093}
94
95void
96SBBroadcaster::AddInitialEventsToListener (const SBListener &listener, uint32_t requested_events)
97{
Greg Clayton3f5ee7f2010-10-29 04:59:35 +000098 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
99 if (log)
100 log->Printf ("SBBroadcaster(%p)::AddInitialEventsToListener (SBListener(%p), event_mask=0x%8.8x)", m_opaque, listener.get(), requested_events);
Greg Clayton63094e02010-06-23 01:19:29 +0000101 if (m_opaque)
102 m_opaque->AddInitialEventsToListener (listener.get(), requested_events);
Chris Lattner24943d22010-06-08 16:52:24 +0000103}
104
105uint32_t
106SBBroadcaster::AddListener (const SBListener &listener, uint32_t event_mask)
107{
Greg Clayton63094e02010-06-23 01:19:29 +0000108 if (m_opaque)
109 return m_opaque->AddListener (listener.get(), event_mask);
Chris Lattner24943d22010-06-08 16:52:24 +0000110 return 0;
111}
112
113const char *
Greg Clayton49ce6822010-10-31 03:01:06 +0000114SBBroadcaster::GetName () const
Chris Lattner24943d22010-06-08 16:52:24 +0000115{
Greg Clayton63094e02010-06-23 01:19:29 +0000116 if (m_opaque)
Greg Clayton49ce6822010-10-31 03:01:06 +0000117 return m_opaque->GetBroadcasterName().GetCString();
Chris Lattner24943d22010-06-08 16:52:24 +0000118 return NULL;
119}
120
121bool
122SBBroadcaster::EventTypeHasListeners (uint32_t event_type)
123{
Greg Clayton63094e02010-06-23 01:19:29 +0000124 if (m_opaque)
125 return m_opaque->EventTypeHasListeners (event_type);
Chris Lattner24943d22010-06-08 16:52:24 +0000126 return false;
127}
128
129bool
130SBBroadcaster::RemoveListener (const SBListener &listener, uint32_t event_mask)
131{
Greg Clayton63094e02010-06-23 01:19:29 +0000132 if (m_opaque)
133 return m_opaque->RemoveListener (listener.get(), event_mask);
Chris Lattner24943d22010-06-08 16:52:24 +0000134 return false;
135}
136
137Broadcaster *
Greg Clayton63094e02010-06-23 01:19:29 +0000138SBBroadcaster::get () const
Chris Lattner24943d22010-06-08 16:52:24 +0000139{
Greg Clayton63094e02010-06-23 01:19:29 +0000140 return m_opaque;
Chris Lattner24943d22010-06-08 16:52:24 +0000141}
142
143void
Greg Clayton63094e02010-06-23 01:19:29 +0000144SBBroadcaster::reset (Broadcaster *broadcaster, bool owns)
Chris Lattner24943d22010-06-08 16:52:24 +0000145{
Greg Clayton63094e02010-06-23 01:19:29 +0000146 if (m_opaque && m_opaque_owned)
147 delete m_opaque;
148 m_opaque = broadcaster;
149 m_opaque_owned = owns;
Chris Lattner24943d22010-06-08 16:52:24 +0000150}
151
152
153bool
154SBBroadcaster::IsValid () const
155{
Greg Clayton63094e02010-06-23 01:19:29 +0000156 return m_opaque != NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000157}
158
159bool
160SBBroadcaster::operator == (const SBBroadcaster &rhs) const
161{
Greg Clayton63094e02010-06-23 01:19:29 +0000162 return m_opaque == rhs.m_opaque;
Chris Lattner24943d22010-06-08 16:52:24 +0000163
164}
165
166bool
167SBBroadcaster::operator != (const SBBroadcaster &rhs) const
168{
Greg Clayton63094e02010-06-23 01:19:29 +0000169 return m_opaque != rhs.m_opaque;
Chris Lattner24943d22010-06-08 16:52:24 +0000170}