180814287SRaphael Isemann //===-- SBBroadcaster.cpp -------------------------------------------------===//
230fdc8d8SChris Lattner //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
630fdc8d8SChris Lattner //
730fdc8d8SChris Lattner //===----------------------------------------------------------------------===//
830fdc8d8SChris Lattner
9181b823bSPavel Labath #include "lldb/Utility/Broadcaster.h"
101755f5b1SJonas Devlieghere #include "lldb/Utility/Instrumentation.h"
1130fdc8d8SChris Lattner
12ca93cc1dSEli Friedman #include "lldb/API/SBBroadcaster.h"
13ca93cc1dSEli Friedman #include "lldb/API/SBEvent.h"
14b9c1b51eSKate Stone #include "lldb/API/SBListener.h"
1530fdc8d8SChris Lattner
1630fdc8d8SChris Lattner using namespace lldb;
1730fdc8d8SChris Lattner using namespace lldb_private;
1830fdc8d8SChris Lattner
SBBroadcaster()191755f5b1SJonas Devlieghere SBBroadcaster::SBBroadcaster() { LLDB_INSTRUMENT_VA(this); }
2030fdc8d8SChris Lattner
SBBroadcaster(const char * name)21b9c1b51eSKate Stone SBBroadcaster::SBBroadcaster(const char *name)
22*28c878aeSShafik Yaghmour : m_opaque_sp(new Broadcaster(nullptr, name)) {
231755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this, name);
24baf5664fSJonas Devlieghere
25efabb123SGreg Clayton m_opaque_ptr = m_opaque_sp.get();
2630fdc8d8SChris Lattner }
2730fdc8d8SChris Lattner
SBBroadcaster(lldb_private::Broadcaster * broadcaster,bool owns)28b9c1b51eSKate Stone SBBroadcaster::SBBroadcaster(lldb_private::Broadcaster *broadcaster, bool owns)
29248a1305SKonrad Kleine : m_opaque_sp(owns ? broadcaster : nullptr), m_opaque_ptr(broadcaster) {}
30efabb123SGreg Clayton
SBBroadcaster(const SBBroadcaster & rhs)31b9c1b51eSKate Stone SBBroadcaster::SBBroadcaster(const SBBroadcaster &rhs)
32baf5664fSJonas Devlieghere : m_opaque_sp(rhs.m_opaque_sp), m_opaque_ptr(rhs.m_opaque_ptr) {
331755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this, rhs);
34baf5664fSJonas Devlieghere }
35efabb123SGreg Clayton
operator =(const SBBroadcaster & rhs)36b9c1b51eSKate Stone const SBBroadcaster &SBBroadcaster::operator=(const SBBroadcaster &rhs) {
371755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this, rhs);
38baf5664fSJonas Devlieghere
39b9c1b51eSKate Stone if (this != &rhs) {
40efabb123SGreg Clayton m_opaque_sp = rhs.m_opaque_sp;
41efabb123SGreg Clayton m_opaque_ptr = rhs.m_opaque_ptr;
42efabb123SGreg Clayton }
43d232abc3SJonas Devlieghere return *this;
4430fdc8d8SChris Lattner }
4530fdc8d8SChris Lattner
~SBBroadcaster()46248a1305SKonrad Kleine SBBroadcaster::~SBBroadcaster() { reset(nullptr, false); }
4730fdc8d8SChris Lattner
BroadcastEventByType(uint32_t event_type,bool unique)48b9c1b51eSKate Stone void SBBroadcaster::BroadcastEventByType(uint32_t event_type, bool unique) {
491755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this, event_type, unique);
50baf5664fSJonas Devlieghere
51248a1305SKonrad Kleine if (m_opaque_ptr == nullptr)
5230fdc8d8SChris Lattner return;
5330fdc8d8SChris Lattner
5430fdc8d8SChris Lattner if (unique)
55efabb123SGreg Clayton m_opaque_ptr->BroadcastEventIfUnique(event_type);
5630fdc8d8SChris Lattner else
57efabb123SGreg Clayton m_opaque_ptr->BroadcastEvent(event_type);
5830fdc8d8SChris Lattner }
5930fdc8d8SChris Lattner
BroadcastEvent(const SBEvent & event,bool unique)60b9c1b51eSKate Stone void SBBroadcaster::BroadcastEvent(const SBEvent &event, bool unique) {
611755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this, event, unique);
62baf5664fSJonas Devlieghere
63248a1305SKonrad Kleine if (m_opaque_ptr == nullptr)
6430fdc8d8SChris Lattner return;
6530fdc8d8SChris Lattner
666611103cSGreg Clayton EventSP event_sp = event.GetSP();
6730fdc8d8SChris Lattner if (unique)
68efabb123SGreg Clayton m_opaque_ptr->BroadcastEventIfUnique(event_sp);
6930fdc8d8SChris Lattner else
70efabb123SGreg Clayton m_opaque_ptr->BroadcastEvent(event_sp);
7130fdc8d8SChris Lattner }
7230fdc8d8SChris Lattner
AddInitialEventsToListener(const SBListener & listener,uint32_t requested_events)73b9c1b51eSKate Stone void SBBroadcaster::AddInitialEventsToListener(const SBListener &listener,
74b9c1b51eSKate Stone uint32_t requested_events) {
751755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this, listener, requested_events);
76baf5664fSJonas Devlieghere
77efabb123SGreg Clayton if (m_opaque_ptr)
78b9c1b51eSKate Stone m_opaque_ptr->AddInitialEventsToListener(listener.m_opaque_sp,
79b9c1b51eSKate Stone requested_events);
8030fdc8d8SChris Lattner }
8130fdc8d8SChris Lattner
AddListener(const SBListener & listener,uint32_t event_mask)82b9c1b51eSKate Stone uint32_t SBBroadcaster::AddListener(const SBListener &listener,
83b9c1b51eSKate Stone uint32_t event_mask) {
841755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this, listener, event_mask);
85baf5664fSJonas Devlieghere
86efabb123SGreg Clayton if (m_opaque_ptr)
87583bbb1dSJim Ingham return m_opaque_ptr->AddListener(listener.m_opaque_sp, event_mask);
8830fdc8d8SChris Lattner return 0;
8930fdc8d8SChris Lattner }
9030fdc8d8SChris Lattner
GetName() const91b9c1b51eSKate Stone const char *SBBroadcaster::GetName() const {
921755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this);
93baf5664fSJonas Devlieghere
94efabb123SGreg Clayton if (m_opaque_ptr)
95efabb123SGreg Clayton return m_opaque_ptr->GetBroadcasterName().GetCString();
96248a1305SKonrad Kleine return nullptr;
9730fdc8d8SChris Lattner }
9830fdc8d8SChris Lattner
EventTypeHasListeners(uint32_t event_type)99b9c1b51eSKate Stone bool SBBroadcaster::EventTypeHasListeners(uint32_t event_type) {
1001755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this, event_type);
101baf5664fSJonas Devlieghere
102efabb123SGreg Clayton if (m_opaque_ptr)
103efabb123SGreg Clayton return m_opaque_ptr->EventTypeHasListeners(event_type);
10430fdc8d8SChris Lattner return false;
10530fdc8d8SChris Lattner }
10630fdc8d8SChris Lattner
RemoveListener(const SBListener & listener,uint32_t event_mask)107b9c1b51eSKate Stone bool SBBroadcaster::RemoveListener(const SBListener &listener,
108b9c1b51eSKate Stone uint32_t event_mask) {
1091755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this, listener, event_mask);
110baf5664fSJonas Devlieghere
111efabb123SGreg Clayton if (m_opaque_ptr)
112583bbb1dSJim Ingham return m_opaque_ptr->RemoveListener(listener.m_opaque_sp, event_mask);
11330fdc8d8SChris Lattner return false;
11430fdc8d8SChris Lattner }
11530fdc8d8SChris Lattner
get() const116b9c1b51eSKate Stone Broadcaster *SBBroadcaster::get() const { return m_opaque_ptr; }
11730fdc8d8SChris Lattner
reset(Broadcaster * broadcaster,bool owns)118b9c1b51eSKate Stone void SBBroadcaster::reset(Broadcaster *broadcaster, bool owns) {
119efabb123SGreg Clayton if (owns)
120efabb123SGreg Clayton m_opaque_sp.reset(broadcaster);
121efabb123SGreg Clayton else
122efabb123SGreg Clayton m_opaque_sp.reset();
123efabb123SGreg Clayton m_opaque_ptr = broadcaster;
12430fdc8d8SChris Lattner }
12530fdc8d8SChris Lattner
IsValid() const126baf5664fSJonas Devlieghere bool SBBroadcaster::IsValid() const {
1271755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this);
1287f5237bcSPavel Labath return this->operator bool();
1297f5237bcSPavel Labath }
operator bool() const1307f5237bcSPavel Labath SBBroadcaster::operator bool() const {
1311755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this);
132baf5664fSJonas Devlieghere
133248a1305SKonrad Kleine return m_opaque_ptr != nullptr;
134baf5664fSJonas Devlieghere }
13530fdc8d8SChris Lattner
Clear()136b9c1b51eSKate Stone void SBBroadcaster::Clear() {
1371755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this);
138baf5664fSJonas Devlieghere
1391c2f2838SGreg Clayton m_opaque_sp.reset();
140248a1305SKonrad Kleine m_opaque_ptr = nullptr;
1411c2f2838SGreg Clayton }
1421c2f2838SGreg Clayton
operator ==(const SBBroadcaster & rhs) const143b9c1b51eSKate Stone bool SBBroadcaster::operator==(const SBBroadcaster &rhs) const {
1441755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this, rhs);
145baf5664fSJonas Devlieghere
146efabb123SGreg Clayton return m_opaque_ptr == rhs.m_opaque_ptr;
14730fdc8d8SChris Lattner }
14830fdc8d8SChris Lattner
operator !=(const SBBroadcaster & rhs) const149b9c1b51eSKate Stone bool SBBroadcaster::operator!=(const SBBroadcaster &rhs) const {
1501755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this, rhs);
151baf5664fSJonas Devlieghere
152efabb123SGreg Clayton return m_opaque_ptr != rhs.m_opaque_ptr;
15330fdc8d8SChris Lattner }
154f7d6a2a6SGreg Clayton
operator <(const SBBroadcaster & rhs) const155b9c1b51eSKate Stone bool SBBroadcaster::operator<(const SBBroadcaster &rhs) const {
1561755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this, rhs);
157baf5664fSJonas Devlieghere
158f7d6a2a6SGreg Clayton return m_opaque_ptr < rhs.m_opaque_ptr;
159f7d6a2a6SGreg Clayton }
160