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