blob: 5189dd7bb27109630bb32eac695fc990e1586b03 [file] [log] [blame]
Chris Lattner30fdc8d2010-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 Ticeceb6b132010-10-26 03:11:13 +000011#include "lldb/Core/Log.h"
Chris Lattner30fdc8d2010-06-08 16:52:24 +000012
Eli Friedmanca93cc12010-06-09 07:37:52 +000013#include "lldb/API/SBBroadcaster.h"
Eli Friedmanca93cc12010-06-09 07:37:52 +000014#include "lldb/API/SBEvent.h"
Kate Stoneb9c1b512016-09-06 20:57:50 +000015#include "lldb/API/SBListener.h"
Chris Lattner30fdc8d2010-06-08 16:52:24 +000016
17using namespace lldb;
18using namespace lldb_private;
19
Kate Stoneb9c1b512016-09-06 20:57:50 +000020SBBroadcaster::SBBroadcaster() : m_opaque_sp(), m_opaque_ptr(NULL) {}
Chris Lattner30fdc8d2010-06-08 16:52:24 +000021
Kate Stoneb9c1b512016-09-06 20:57:50 +000022SBBroadcaster::SBBroadcaster(const char *name)
23 : m_opaque_sp(new Broadcaster(NULL, name)), m_opaque_ptr(NULL) {
24 m_opaque_ptr = m_opaque_sp.get();
25 Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API |
26 LIBLLDB_LOG_VERBOSE));
27
28 if (log)
29 log->Printf(
30 "SBBroadcaster::SBBroadcaster (name=\"%s\") => SBBroadcaster(%p)", name,
31 static_cast<void *>(m_opaque_ptr));
Chris Lattner30fdc8d2010-06-08 16:52:24 +000032}
33
Kate Stoneb9c1b512016-09-06 20:57:50 +000034SBBroadcaster::SBBroadcaster(lldb_private::Broadcaster *broadcaster, bool owns)
35 : m_opaque_sp(owns ? broadcaster : NULL), m_opaque_ptr(broadcaster) {
36 Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API |
37 LIBLLDB_LOG_VERBOSE));
Caroline Ticeceb6b132010-10-26 03:11:13 +000038
Kate Stoneb9c1b512016-09-06 20:57:50 +000039 if (log)
40 log->Printf("SBBroadcaster::SBBroadcaster (broadcaster=%p, bool owns=%i) "
41 "=> SBBroadcaster(%p)",
42 static_cast<void *>(broadcaster), owns,
43 static_cast<void *>(m_opaque_ptr));
Chris Lattner30fdc8d2010-06-08 16:52:24 +000044}
45
Kate Stoneb9c1b512016-09-06 20:57:50 +000046SBBroadcaster::SBBroadcaster(const SBBroadcaster &rhs)
47 : m_opaque_sp(rhs.m_opaque_sp), m_opaque_ptr(rhs.m_opaque_ptr) {}
Caroline Ticeceb6b132010-10-26 03:11:13 +000048
Kate Stoneb9c1b512016-09-06 20:57:50 +000049const SBBroadcaster &SBBroadcaster::operator=(const SBBroadcaster &rhs) {
50 if (this != &rhs) {
51 m_opaque_sp = rhs.m_opaque_sp;
52 m_opaque_ptr = rhs.m_opaque_ptr;
53 }
54 return *this;
Greg Claytonefabb122010-11-05 23:17:00 +000055}
56
Kate Stoneb9c1b512016-09-06 20:57:50 +000057SBBroadcaster::~SBBroadcaster() { reset(NULL, false); }
58
59void SBBroadcaster::BroadcastEventByType(uint32_t event_type, bool unique) {
60 Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
61
62 if (log)
63 log->Printf("SBBroadcaster(%p)::BroadcastEventByType (event_type=0x%8.8x, "
64 "unique=%i)",
65 static_cast<void *>(m_opaque_ptr), event_type, unique);
66
67 if (m_opaque_ptr == NULL)
68 return;
69
70 if (unique)
71 m_opaque_ptr->BroadcastEventIfUnique(event_type);
72 else
73 m_opaque_ptr->BroadcastEvent(event_type);
Greg Claytonefabb122010-11-05 23:17:00 +000074}
75
Kate Stoneb9c1b512016-09-06 20:57:50 +000076void SBBroadcaster::BroadcastEvent(const SBEvent &event, bool unique) {
77 Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
78
79 if (log)
80 log->Printf(
81 "SBBroadcaster(%p)::BroadcastEventByType (SBEvent(%p), unique=%i)",
82 static_cast<void *>(m_opaque_ptr), static_cast<void *>(event.get()),
83 unique);
84
85 if (m_opaque_ptr == NULL)
86 return;
87
88 EventSP event_sp = event.GetSP();
89 if (unique)
90 m_opaque_ptr->BroadcastEventIfUnique(event_sp);
91 else
92 m_opaque_ptr->BroadcastEvent(event_sp);
Chris Lattner30fdc8d2010-06-08 16:52:24 +000093}
94
Kate Stoneb9c1b512016-09-06 20:57:50 +000095void SBBroadcaster::AddInitialEventsToListener(const SBListener &listener,
96 uint32_t requested_events) {
97 Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
98 if (log)
99 log->Printf("SBBroadcaster(%p)::AddInitialEventsToListener "
100 "(SBListener(%p), event_mask=0x%8.8x)",
101 static_cast<void *>(m_opaque_ptr),
102 static_cast<void *>(listener.get()), requested_events);
103 if (m_opaque_ptr)
104 m_opaque_ptr->AddInitialEventsToListener(listener.m_opaque_sp,
105 requested_events);
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000106}
107
Kate Stoneb9c1b512016-09-06 20:57:50 +0000108uint32_t SBBroadcaster::AddListener(const SBListener &listener,
109 uint32_t event_mask) {
110 if (m_opaque_ptr)
111 return m_opaque_ptr->AddListener(listener.m_opaque_sp, event_mask);
112 return 0;
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000113}
114
Kate Stoneb9c1b512016-09-06 20:57:50 +0000115const char *SBBroadcaster::GetName() const {
116 if (m_opaque_ptr)
117 return m_opaque_ptr->GetBroadcasterName().GetCString();
118 return NULL;
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000119}
120
Kate Stoneb9c1b512016-09-06 20:57:50 +0000121bool SBBroadcaster::EventTypeHasListeners(uint32_t event_type) {
122 if (m_opaque_ptr)
123 return m_opaque_ptr->EventTypeHasListeners(event_type);
124 return false;
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000125}
126
Kate Stoneb9c1b512016-09-06 20:57:50 +0000127bool SBBroadcaster::RemoveListener(const SBListener &listener,
128 uint32_t event_mask) {
129 if (m_opaque_ptr)
130 return m_opaque_ptr->RemoveListener(listener.m_opaque_sp, event_mask);
131 return false;
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000132}
133
Kate Stoneb9c1b512016-09-06 20:57:50 +0000134Broadcaster *SBBroadcaster::get() const { return m_opaque_ptr; }
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000135
Kate Stoneb9c1b512016-09-06 20:57:50 +0000136void SBBroadcaster::reset(Broadcaster *broadcaster, bool owns) {
137 if (owns)
138 m_opaque_sp.reset(broadcaster);
139 else
Greg Clayton1c2f2832010-12-05 19:36:39 +0000140 m_opaque_sp.reset();
Kate Stoneb9c1b512016-09-06 20:57:50 +0000141 m_opaque_ptr = broadcaster;
Greg Clayton1c2f2832010-12-05 19:36:39 +0000142}
143
Kate Stoneb9c1b512016-09-06 20:57:50 +0000144bool SBBroadcaster::IsValid() const { return m_opaque_ptr != NULL; }
145
146void SBBroadcaster::Clear() {
147 m_opaque_sp.reset();
148 m_opaque_ptr = NULL;
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000149}
150
Kate Stoneb9c1b512016-09-06 20:57:50 +0000151bool SBBroadcaster::operator==(const SBBroadcaster &rhs) const {
152 return m_opaque_ptr == rhs.m_opaque_ptr;
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000153}
Greg Claytonf7d6a2a2010-12-05 23:14:19 +0000154
Kate Stoneb9c1b512016-09-06 20:57:50 +0000155bool SBBroadcaster::operator!=(const SBBroadcaster &rhs) const {
156 return m_opaque_ptr != rhs.m_opaque_ptr;
157}
158
159bool SBBroadcaster::operator<(const SBBroadcaster &rhs) const {
160 return m_opaque_ptr < rhs.m_opaque_ptr;
Greg Claytonf7d6a2a2010-12-05 23:14:19 +0000161}