blob: 9ede891868b19ce43edbe1a0f4cf4bc5b0b364c1 [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
Eli Friedmand6ec8aa2010-06-09 07:37:52 +000013#include "lldb/API/SBBroadcaster.h"
14#include "lldb/API/SBListener.h"
15#include "lldb/API/SBEvent.h"
Chris Lattner24943d22010-06-08 16:52:24 +000016
17using namespace lldb;
18using namespace lldb_private;
19
20
21SBBroadcaster::SBBroadcaster () :
Greg Clayton538eb822010-11-05 23:17:00 +000022 m_opaque_sp (),
23 m_opaque_ptr (NULL)
Chris Lattner24943d22010-06-08 16:52:24 +000024{
25}
26
Chris Lattner24943d22010-06-08 16:52:24 +000027SBBroadcaster::SBBroadcaster (const char *name) :
Jim Ingham5a15e692012-02-16 06:50:00 +000028 m_opaque_sp (new Broadcaster (NULL, name)),
Greg Clayton538eb822010-11-05 23:17:00 +000029 m_opaque_ptr (NULL)
Chris Lattner24943d22010-06-08 16:52:24 +000030{
Greg Clayton538eb822010-11-05 23:17:00 +000031 m_opaque_ptr = m_opaque_sp.get();
Greg Claytone005f2c2010-11-06 01:53:30 +000032 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API | LIBLLDB_LOG_VERBOSE));
Caroline Tice7826c882010-10-26 03:11:13 +000033
34 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +000035 log->Printf ("SBBroadcaster::SBBroadcaster (name=\"%s\") => SBBroadcaster(%p)",
Greg Clayton538eb822010-11-05 23:17:00 +000036 name, m_opaque_ptr);
Chris Lattner24943d22010-06-08 16:52:24 +000037}
38
39SBBroadcaster::SBBroadcaster (lldb_private::Broadcaster *broadcaster, bool owns) :
Greg Clayton538eb822010-11-05 23:17:00 +000040 m_opaque_sp (owns ? broadcaster : NULL),
41 m_opaque_ptr (broadcaster)
Chris Lattner24943d22010-06-08 16:52:24 +000042{
Greg Claytone005f2c2010-11-06 01:53:30 +000043 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API | LIBLLDB_LOG_VERBOSE));
Caroline Tice7826c882010-10-26 03:11:13 +000044
45 if (log)
Greg Clayton538eb822010-11-05 23:17:00 +000046 log->Printf ("SBBroadcaster::SBBroadcaster (broadcaster=%p, bool owns=%i) => SBBroadcaster(%p)",
47 broadcaster, owns, m_opaque_ptr);
48}
49
50SBBroadcaster::SBBroadcaster (const SBBroadcaster &rhs) :
51 m_opaque_sp (rhs.m_opaque_sp),
52 m_opaque_ptr (rhs.m_opaque_ptr)
53{
54}
55
56const SBBroadcaster &
57SBBroadcaster::operator = (const SBBroadcaster &rhs)
58{
59 if (this != &rhs)
60 {
61 m_opaque_sp = rhs.m_opaque_sp;
62 m_opaque_ptr = rhs.m_opaque_ptr;
63 }
64 return *this;
Chris Lattner24943d22010-06-08 16:52:24 +000065}
66
67SBBroadcaster::~SBBroadcaster()
68{
Greg Clayton63094e02010-06-23 01:19:29 +000069 reset (NULL, false);
Chris Lattner24943d22010-06-08 16:52:24 +000070}
71
72void
73SBBroadcaster::BroadcastEventByType (uint32_t event_type, bool unique)
74{
Greg Claytone005f2c2010-11-06 01:53:30 +000075 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +000076
77 if (log)
Greg Clayton538eb822010-11-05 23:17:00 +000078 log->Printf ("SBBroadcaster(%p)::BroadcastEventByType (event_type=0x%8.8x, unique=%i)", m_opaque_ptr, event_type, unique);
Caroline Tice7826c882010-10-26 03:11:13 +000079
Greg Clayton538eb822010-11-05 23:17:00 +000080 if (m_opaque_ptr == NULL)
Chris Lattner24943d22010-06-08 16:52:24 +000081 return;
82
83 if (unique)
Greg Clayton538eb822010-11-05 23:17:00 +000084 m_opaque_ptr->BroadcastEventIfUnique (event_type);
Chris Lattner24943d22010-06-08 16:52:24 +000085 else
Greg Clayton538eb822010-11-05 23:17:00 +000086 m_opaque_ptr->BroadcastEvent (event_type);
Chris Lattner24943d22010-06-08 16:52:24 +000087}
88
89void
90SBBroadcaster::BroadcastEvent (const SBEvent &event, bool unique)
91{
Greg Claytone005f2c2010-11-06 01:53:30 +000092 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Clayton3f5ee7f2010-10-29 04:59:35 +000093
94 if (log)
Greg Clayton538eb822010-11-05 23:17:00 +000095 log->Printf ("SBBroadcaster(%p)::BroadcastEventByType (SBEvent(%p), unique=%i)", m_opaque_ptr, event.get(), unique);
Greg Clayton3f5ee7f2010-10-29 04:59:35 +000096
Greg Clayton538eb822010-11-05 23:17:00 +000097 if (m_opaque_ptr == NULL)
Chris Lattner24943d22010-06-08 16:52:24 +000098 return;
99
Greg Clayton63094e02010-06-23 01:19:29 +0000100 EventSP event_sp = event.GetSP ();
Chris Lattner24943d22010-06-08 16:52:24 +0000101 if (unique)
Greg Clayton538eb822010-11-05 23:17:00 +0000102 m_opaque_ptr->BroadcastEventIfUnique (event_sp);
Chris Lattner24943d22010-06-08 16:52:24 +0000103 else
Greg Clayton538eb822010-11-05 23:17:00 +0000104 m_opaque_ptr->BroadcastEvent (event_sp);
Chris Lattner24943d22010-06-08 16:52:24 +0000105}
106
107void
108SBBroadcaster::AddInitialEventsToListener (const SBListener &listener, uint32_t requested_events)
109{
Greg Claytone005f2c2010-11-06 01:53:30 +0000110 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000111 if (log)
Greg Clayton538eb822010-11-05 23:17:00 +0000112 log->Printf ("SBBroadcaster(%p)::AddInitialEventsToListener (SBListener(%p), event_mask=0x%8.8x)", m_opaque_ptr, listener.get(), requested_events);
113 if (m_opaque_ptr)
114 m_opaque_ptr->AddInitialEventsToListener (listener.get(), requested_events);
Chris Lattner24943d22010-06-08 16:52:24 +0000115}
116
117uint32_t
118SBBroadcaster::AddListener (const SBListener &listener, uint32_t event_mask)
119{
Greg Clayton538eb822010-11-05 23:17:00 +0000120 if (m_opaque_ptr)
121 return m_opaque_ptr->AddListener (listener.get(), event_mask);
Chris Lattner24943d22010-06-08 16:52:24 +0000122 return 0;
123}
124
125const char *
Greg Clayton49ce6822010-10-31 03:01:06 +0000126SBBroadcaster::GetName () const
Chris Lattner24943d22010-06-08 16:52:24 +0000127{
Greg Clayton538eb822010-11-05 23:17:00 +0000128 if (m_opaque_ptr)
129 return m_opaque_ptr->GetBroadcasterName().GetCString();
Chris Lattner24943d22010-06-08 16:52:24 +0000130 return NULL;
131}
132
133bool
134SBBroadcaster::EventTypeHasListeners (uint32_t event_type)
135{
Greg Clayton538eb822010-11-05 23:17:00 +0000136 if (m_opaque_ptr)
137 return m_opaque_ptr->EventTypeHasListeners (event_type);
Chris Lattner24943d22010-06-08 16:52:24 +0000138 return false;
139}
140
141bool
142SBBroadcaster::RemoveListener (const SBListener &listener, uint32_t event_mask)
143{
Greg Clayton538eb822010-11-05 23:17:00 +0000144 if (m_opaque_ptr)
145 return m_opaque_ptr->RemoveListener (listener.get(), event_mask);
Chris Lattner24943d22010-06-08 16:52:24 +0000146 return false;
147}
148
149Broadcaster *
Greg Clayton63094e02010-06-23 01:19:29 +0000150SBBroadcaster::get () const
Chris Lattner24943d22010-06-08 16:52:24 +0000151{
Greg Clayton538eb822010-11-05 23:17:00 +0000152 return m_opaque_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +0000153}
154
155void
Greg Clayton63094e02010-06-23 01:19:29 +0000156SBBroadcaster::reset (Broadcaster *broadcaster, bool owns)
Chris Lattner24943d22010-06-08 16:52:24 +0000157{
Greg Clayton538eb822010-11-05 23:17:00 +0000158 if (owns)
159 m_opaque_sp.reset (broadcaster);
160 else
161 m_opaque_sp.reset ();
162 m_opaque_ptr = broadcaster;
Chris Lattner24943d22010-06-08 16:52:24 +0000163}
164
165
166bool
167SBBroadcaster::IsValid () const
168{
Greg Clayton538eb822010-11-05 23:17:00 +0000169 return m_opaque_ptr != NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000170}
171
Greg Clayton3ca95da2010-12-05 19:36:39 +0000172void
173SBBroadcaster::Clear ()
174{
175 m_opaque_sp.reset();
176 m_opaque_ptr = NULL;
177}
178
Chris Lattner24943d22010-06-08 16:52:24 +0000179bool
180SBBroadcaster::operator == (const SBBroadcaster &rhs) const
181{
Greg Clayton538eb822010-11-05 23:17:00 +0000182 return m_opaque_ptr == rhs.m_opaque_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +0000183
184}
185
186bool
187SBBroadcaster::operator != (const SBBroadcaster &rhs) const
188{
Greg Clayton538eb822010-11-05 23:17:00 +0000189 return m_opaque_ptr != rhs.m_opaque_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +0000190}
Greg Clayton422b1ae2010-12-05 23:14:19 +0000191
192bool
193SBBroadcaster::operator < (const SBBroadcaster &rhs) const
194{
195 return m_opaque_ptr < rhs.m_opaque_ptr;
196}