1254721Semaste//===-- SBBroadcaster.cpp ---------------------------------------*- C++ -*-===//
2254721Semaste//
3254721Semaste//                     The LLVM Compiler Infrastructure
4254721Semaste//
5254721Semaste// This file is distributed under the University of Illinois Open Source
6254721Semaste// License. See LICENSE.TXT for details.
7254721Semaste//
8254721Semaste//===----------------------------------------------------------------------===//
9254721Semaste
10254721Semaste#include "lldb/Core/Broadcaster.h"
11254721Semaste#include "lldb/Core/Log.h"
12254721Semaste
13254721Semaste#include "lldb/API/SBBroadcaster.h"
14254721Semaste#include "lldb/API/SBListener.h"
15254721Semaste#include "lldb/API/SBEvent.h"
16254721Semaste
17254721Semasteusing namespace lldb;
18254721Semasteusing namespace lldb_private;
19254721Semaste
20254721Semaste
21254721SemasteSBBroadcaster::SBBroadcaster () :
22254721Semaste    m_opaque_sp (),
23254721Semaste    m_opaque_ptr (NULL)
24254721Semaste{
25254721Semaste}
26254721Semaste
27254721SemasteSBBroadcaster::SBBroadcaster (const char *name) :
28254721Semaste    m_opaque_sp (new Broadcaster (NULL, name)),
29254721Semaste    m_opaque_ptr (NULL)
30254721Semaste{
31254721Semaste    m_opaque_ptr = m_opaque_sp.get();
32254721Semaste    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API | LIBLLDB_LOG_VERBOSE));
33254721Semaste
34254721Semaste    if (log)
35254721Semaste        log->Printf ("SBBroadcaster::SBBroadcaster (name=\"%s\") => SBBroadcaster(%p)",
36254721Semaste                     name, m_opaque_ptr);
37254721Semaste}
38254721Semaste
39254721SemasteSBBroadcaster::SBBroadcaster (lldb_private::Broadcaster *broadcaster, bool owns) :
40254721Semaste    m_opaque_sp (owns ? broadcaster : NULL),
41254721Semaste    m_opaque_ptr (broadcaster)
42254721Semaste{
43254721Semaste    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API | LIBLLDB_LOG_VERBOSE));
44254721Semaste
45254721Semaste    if (log)
46254721Semaste        log->Printf ("SBBroadcaster::SBBroadcaster (broadcaster=%p, bool owns=%i) => SBBroadcaster(%p)",
47254721Semaste                     broadcaster, owns, m_opaque_ptr);
48254721Semaste}
49254721Semaste
50254721SemasteSBBroadcaster::SBBroadcaster (const SBBroadcaster &rhs) :
51254721Semaste    m_opaque_sp (rhs.m_opaque_sp),
52254721Semaste    m_opaque_ptr (rhs.m_opaque_ptr)
53254721Semaste{
54254721Semaste}
55254721Semaste
56254721Semasteconst SBBroadcaster &
57254721SemasteSBBroadcaster::operator = (const SBBroadcaster &rhs)
58254721Semaste{
59254721Semaste    if (this != &rhs)
60254721Semaste    {
61254721Semaste        m_opaque_sp = rhs.m_opaque_sp;
62254721Semaste        m_opaque_ptr = rhs.m_opaque_ptr;
63254721Semaste    }
64254721Semaste    return *this;
65254721Semaste}
66254721Semaste
67254721SemasteSBBroadcaster::~SBBroadcaster()
68254721Semaste{
69254721Semaste    reset (NULL, false);
70254721Semaste}
71254721Semaste
72254721Semastevoid
73254721SemasteSBBroadcaster::BroadcastEventByType (uint32_t event_type, bool unique)
74254721Semaste{
75254721Semaste    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
76254721Semaste
77254721Semaste    if (log)
78254721Semaste        log->Printf ("SBBroadcaster(%p)::BroadcastEventByType (event_type=0x%8.8x, unique=%i)", m_opaque_ptr, event_type, unique);
79254721Semaste
80254721Semaste    if (m_opaque_ptr == NULL)
81254721Semaste        return;
82254721Semaste
83254721Semaste    if (unique)
84254721Semaste        m_opaque_ptr->BroadcastEventIfUnique (event_type);
85254721Semaste    else
86254721Semaste        m_opaque_ptr->BroadcastEvent (event_type);
87254721Semaste}
88254721Semaste
89254721Semastevoid
90254721SemasteSBBroadcaster::BroadcastEvent (const SBEvent &event, bool unique)
91254721Semaste{
92254721Semaste    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
93254721Semaste
94254721Semaste    if (log)
95254721Semaste        log->Printf ("SBBroadcaster(%p)::BroadcastEventByType (SBEvent(%p), unique=%i)", m_opaque_ptr, event.get(), unique);
96254721Semaste
97254721Semaste    if (m_opaque_ptr == NULL)
98254721Semaste        return;
99254721Semaste
100254721Semaste    EventSP event_sp = event.GetSP ();
101254721Semaste    if (unique)
102254721Semaste        m_opaque_ptr->BroadcastEventIfUnique (event_sp);
103254721Semaste    else
104254721Semaste        m_opaque_ptr->BroadcastEvent (event_sp);
105254721Semaste}
106254721Semaste
107254721Semastevoid
108254721SemasteSBBroadcaster::AddInitialEventsToListener (const SBListener &listener, uint32_t requested_events)
109254721Semaste{
110254721Semaste    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
111254721Semaste    if (log)
112254721Semaste        log->Printf ("SBBroadcaster(%p)::AddInitialEventsToListener (SBListener(%p), event_mask=0x%8.8x)", m_opaque_ptr, listener.get(), requested_events);
113254721Semaste    if (m_opaque_ptr)
114254721Semaste        m_opaque_ptr->AddInitialEventsToListener (listener.get(), requested_events);
115254721Semaste}
116254721Semaste
117254721Semasteuint32_t
118254721SemasteSBBroadcaster::AddListener (const SBListener &listener, uint32_t event_mask)
119254721Semaste{
120254721Semaste    if (m_opaque_ptr)
121254721Semaste        return m_opaque_ptr->AddListener (listener.get(), event_mask);
122254721Semaste    return 0;
123254721Semaste}
124254721Semaste
125254721Semasteconst char *
126254721SemasteSBBroadcaster::GetName () const
127254721Semaste{
128254721Semaste    if (m_opaque_ptr)
129254721Semaste        return m_opaque_ptr->GetBroadcasterName().GetCString();
130254721Semaste    return NULL;
131254721Semaste}
132254721Semaste
133254721Semastebool
134254721SemasteSBBroadcaster::EventTypeHasListeners (uint32_t event_type)
135254721Semaste{
136254721Semaste    if (m_opaque_ptr)
137254721Semaste        return m_opaque_ptr->EventTypeHasListeners (event_type);
138254721Semaste    return false;
139254721Semaste}
140254721Semaste
141254721Semastebool
142254721SemasteSBBroadcaster::RemoveListener (const SBListener &listener, uint32_t event_mask)
143254721Semaste{
144254721Semaste    if (m_opaque_ptr)
145254721Semaste        return m_opaque_ptr->RemoveListener (listener.get(), event_mask);
146254721Semaste    return false;
147254721Semaste}
148254721Semaste
149254721SemasteBroadcaster *
150254721SemasteSBBroadcaster::get () const
151254721Semaste{
152254721Semaste    return m_opaque_ptr;
153254721Semaste}
154254721Semaste
155254721Semastevoid
156254721SemasteSBBroadcaster::reset (Broadcaster *broadcaster, bool owns)
157254721Semaste{
158254721Semaste    if (owns)
159254721Semaste        m_opaque_sp.reset (broadcaster);
160254721Semaste    else
161254721Semaste        m_opaque_sp.reset ();
162254721Semaste    m_opaque_ptr = broadcaster;
163254721Semaste}
164254721Semaste
165254721Semaste
166254721Semastebool
167254721SemasteSBBroadcaster::IsValid () const
168254721Semaste{
169254721Semaste    return m_opaque_ptr != NULL;
170254721Semaste}
171254721Semaste
172254721Semastevoid
173254721SemasteSBBroadcaster::Clear ()
174254721Semaste{
175254721Semaste    m_opaque_sp.reset();
176254721Semaste    m_opaque_ptr = NULL;
177254721Semaste}
178254721Semaste
179254721Semastebool
180254721SemasteSBBroadcaster::operator == (const SBBroadcaster &rhs) const
181254721Semaste{
182254721Semaste    return m_opaque_ptr == rhs.m_opaque_ptr;
183254721Semaste
184254721Semaste}
185254721Semaste
186254721Semastebool
187254721SemasteSBBroadcaster::operator != (const SBBroadcaster &rhs) const
188254721Semaste{
189254721Semaste    return m_opaque_ptr != rhs.m_opaque_ptr;
190254721Semaste}
191254721Semaste
192254721Semastebool
193254721SemasteSBBroadcaster::operator < (const SBBroadcaster &rhs) const
194254721Semaste{
195254721Semaste    return m_opaque_ptr < rhs.m_opaque_ptr;
196254721Semaste}
197