blob: bbad8e2c5d34bc8920eb475aea1b5b5499f784a5 [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"
11#include "lldb/lldb-forward-rtti.h"
12
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 Clayton63094e02010-06-23 01:19:29 +000022 m_opaque (NULL),
23 m_opaque_owned (false)
Chris Lattner24943d22010-06-08 16:52:24 +000024{
25}
26
27
28SBBroadcaster::SBBroadcaster (const char *name) :
Greg Clayton63094e02010-06-23 01:19:29 +000029 m_opaque (new Broadcaster (name)),
30 m_opaque_owned (true)
Chris Lattner24943d22010-06-08 16:52:24 +000031{
32}
33
34SBBroadcaster::SBBroadcaster (lldb_private::Broadcaster *broadcaster, bool owns) :
Greg Clayton63094e02010-06-23 01:19:29 +000035 m_opaque (broadcaster),
36 m_opaque_owned (owns)
Chris Lattner24943d22010-06-08 16:52:24 +000037{
38}
39
40SBBroadcaster::~SBBroadcaster()
41{
Greg Clayton63094e02010-06-23 01:19:29 +000042 reset (NULL, false);
Chris Lattner24943d22010-06-08 16:52:24 +000043}
44
45void
46SBBroadcaster::BroadcastEventByType (uint32_t event_type, bool unique)
47{
Greg Clayton63094e02010-06-23 01:19:29 +000048 if (m_opaque == NULL)
Chris Lattner24943d22010-06-08 16:52:24 +000049 return;
50
51 if (unique)
Greg Clayton63094e02010-06-23 01:19:29 +000052 m_opaque->BroadcastEventIfUnique (event_type);
Chris Lattner24943d22010-06-08 16:52:24 +000053 else
Greg Clayton63094e02010-06-23 01:19:29 +000054 m_opaque->BroadcastEvent (event_type);
Chris Lattner24943d22010-06-08 16:52:24 +000055}
56
57void
58SBBroadcaster::BroadcastEvent (const SBEvent &event, bool unique)
59{
Greg Clayton63094e02010-06-23 01:19:29 +000060 if (m_opaque == NULL)
Chris Lattner24943d22010-06-08 16:52:24 +000061 return;
62
Greg Clayton63094e02010-06-23 01:19:29 +000063 EventSP event_sp = event.GetSP ();
Chris Lattner24943d22010-06-08 16:52:24 +000064 if (unique)
Greg Clayton63094e02010-06-23 01:19:29 +000065 m_opaque->BroadcastEventIfUnique (event_sp);
Chris Lattner24943d22010-06-08 16:52:24 +000066 else
Greg Clayton63094e02010-06-23 01:19:29 +000067 m_opaque->BroadcastEvent (event_sp);
Chris Lattner24943d22010-06-08 16:52:24 +000068}
69
70void
71SBBroadcaster::AddInitialEventsToListener (const SBListener &listener, uint32_t requested_events)
72{
Greg Clayton63094e02010-06-23 01:19:29 +000073 if (m_opaque)
74 m_opaque->AddInitialEventsToListener (listener.get(), requested_events);
Chris Lattner24943d22010-06-08 16:52:24 +000075}
76
77uint32_t
78SBBroadcaster::AddListener (const SBListener &listener, uint32_t event_mask)
79{
Greg Clayton63094e02010-06-23 01:19:29 +000080 if (m_opaque)
81 return m_opaque->AddListener (listener.get(), event_mask);
Chris Lattner24943d22010-06-08 16:52:24 +000082 return 0;
83}
84
85const char *
86SBBroadcaster::GetName ()
87{
Greg Clayton63094e02010-06-23 01:19:29 +000088 if (m_opaque)
89 return m_opaque->GetBroadcasterName().AsCString();
Chris Lattner24943d22010-06-08 16:52:24 +000090 return NULL;
91}
92
93bool
94SBBroadcaster::EventTypeHasListeners (uint32_t event_type)
95{
Greg Clayton63094e02010-06-23 01:19:29 +000096 if (m_opaque)
97 return m_opaque->EventTypeHasListeners (event_type);
Chris Lattner24943d22010-06-08 16:52:24 +000098 return false;
99}
100
101bool
102SBBroadcaster::RemoveListener (const SBListener &listener, uint32_t event_mask)
103{
Greg Clayton63094e02010-06-23 01:19:29 +0000104 if (m_opaque)
105 return m_opaque->RemoveListener (listener.get(), event_mask);
Chris Lattner24943d22010-06-08 16:52:24 +0000106 return false;
107}
108
109Broadcaster *
Greg Clayton63094e02010-06-23 01:19:29 +0000110SBBroadcaster::get () const
Chris Lattner24943d22010-06-08 16:52:24 +0000111{
Greg Clayton63094e02010-06-23 01:19:29 +0000112 return m_opaque;
Chris Lattner24943d22010-06-08 16:52:24 +0000113}
114
115void
Greg Clayton63094e02010-06-23 01:19:29 +0000116SBBroadcaster::reset (Broadcaster *broadcaster, bool owns)
Chris Lattner24943d22010-06-08 16:52:24 +0000117{
Greg Clayton63094e02010-06-23 01:19:29 +0000118 if (m_opaque && m_opaque_owned)
119 delete m_opaque;
120 m_opaque = broadcaster;
121 m_opaque_owned = owns;
Chris Lattner24943d22010-06-08 16:52:24 +0000122}
123
124
125bool
126SBBroadcaster::IsValid () const
127{
Greg Clayton63094e02010-06-23 01:19:29 +0000128 return m_opaque != NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000129}
130
131bool
132SBBroadcaster::operator == (const SBBroadcaster &rhs) const
133{
Greg Clayton63094e02010-06-23 01:19:29 +0000134 return m_opaque == rhs.m_opaque;
Chris Lattner24943d22010-06-08 16:52:24 +0000135
136}
137
138bool
139SBBroadcaster::operator != (const SBBroadcaster &rhs) const
140{
Greg Clayton63094e02010-06-23 01:19:29 +0000141 return m_opaque != rhs.m_opaque;
Chris Lattner24943d22010-06-08 16:52:24 +0000142}