SBBroadcaster.cpp revision 61ba7ec20f616f907473dd501341cef5b47fa3f8
1//===-- 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"
11#include "lldb/Core/Log.h"
12#include "lldb/lldb-forward-rtti.h"
13
14#include "lldb/API/SBBroadcaster.h"
15#include "lldb/API/SBListener.h"
16#include "lldb/API/SBEvent.h"
17
18using namespace lldb;
19using namespace lldb_private;
20
21
22SBBroadcaster::SBBroadcaster () :
23    m_opaque (NULL),
24    m_opaque_owned (false)
25{
26    Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API | LIBLLDB_LOG_VERBOSE);
27
28    if (log)
29        log->Printf ("SBBroadcastetr::SBBroadcaster () => this = %p", this);
30}
31
32
33SBBroadcaster::SBBroadcaster (const char *name) :
34    m_opaque (new Broadcaster (name)),
35    m_opaque_owned (true)
36{
37    Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API | LIBLLDB_LOG_VERBOSE);
38
39    if (log)
40        log->Printf ("SBBroadcaster::SBBroadcaster (name='%s') => this = %p (m_opaque = %p)",
41                     name, this, m_opaque);
42}
43
44SBBroadcaster::SBBroadcaster (lldb_private::Broadcaster *broadcaster, bool owns) :
45    m_opaque (broadcaster),
46    m_opaque_owned (owns)
47{
48    Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API | LIBLLDB_LOG_VERBOSE);
49
50    if (log)
51        log->Printf ("SBBroadcaster::SBBroadcaster (broadcaster=%p, bool owns='%s') "
52                     " => this = %p (m_opaque = %p)", broadcaster, (owns ? "true" : "false"), this, m_opaque);
53}
54
55SBBroadcaster::~SBBroadcaster()
56{
57    reset (NULL, false);
58}
59
60void
61SBBroadcaster::BroadcastEventByType (uint32_t event_type, bool unique)
62{
63    Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
64
65    if (log)
66        log->Printf ("SBBroadcaster::BroadcastEventByType (%d, %s)", event_type, (unique ? "true" : "false"));
67
68    if (m_opaque == NULL)
69        return;
70
71    if (unique)
72        m_opaque->BroadcastEventIfUnique (event_type);
73    else
74        m_opaque->BroadcastEvent (event_type);
75}
76
77void
78SBBroadcaster::BroadcastEvent (const SBEvent &event, bool unique)
79{
80    if (m_opaque == NULL)
81        return;
82
83    EventSP event_sp = event.GetSP ();
84    if (unique)
85        m_opaque->BroadcastEventIfUnique (event_sp);
86    else
87        m_opaque->BroadcastEvent (event_sp);
88}
89
90void
91SBBroadcaster::AddInitialEventsToListener (const SBListener &listener, uint32_t requested_events)
92{
93    if (m_opaque)
94        m_opaque->AddInitialEventsToListener (listener.get(), requested_events);
95}
96
97uint32_t
98SBBroadcaster::AddListener (const SBListener &listener, uint32_t event_mask)
99{
100    if (m_opaque)
101        return m_opaque->AddListener (listener.get(), event_mask);
102    return 0;
103}
104
105const char *
106SBBroadcaster::GetName ()
107{
108    if (m_opaque)
109        return m_opaque->GetBroadcasterName().AsCString();
110    return NULL;
111}
112
113bool
114SBBroadcaster::EventTypeHasListeners (uint32_t event_type)
115{
116    if (m_opaque)
117        return m_opaque->EventTypeHasListeners (event_type);
118    return false;
119}
120
121bool
122SBBroadcaster::RemoveListener (const SBListener &listener, uint32_t event_mask)
123{
124    if (m_opaque)
125        return m_opaque->RemoveListener (listener.get(), event_mask);
126    return false;
127}
128
129Broadcaster *
130SBBroadcaster::get () const
131{
132    return m_opaque;
133}
134
135void
136SBBroadcaster::reset (Broadcaster *broadcaster, bool owns)
137{
138    if (m_opaque && m_opaque_owned)
139        delete m_opaque;
140    m_opaque = broadcaster;
141    m_opaque_owned = owns;
142}
143
144
145bool
146SBBroadcaster::IsValid () const
147{
148    return m_opaque != NULL;
149}
150
151bool
152SBBroadcaster::operator == (const SBBroadcaster &rhs) const
153{
154    return m_opaque == rhs.m_opaque;
155
156}
157
158bool
159SBBroadcaster::operator != (const SBBroadcaster &rhs) const
160{
161    return m_opaque != rhs.m_opaque;
162}
163