Path: blob/main/contrib/llvm-project/lldb/source/API/SBBroadcaster.cpp
39587 views
//===-- SBBroadcaster.cpp -------------------------------------------------===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#include "lldb/Utility/Broadcaster.h"9#include "lldb/Utility/Instrumentation.h"1011#include "lldb/API/SBBroadcaster.h"12#include "lldb/API/SBEvent.h"13#include "lldb/API/SBListener.h"1415using namespace lldb;16using namespace lldb_private;1718SBBroadcaster::SBBroadcaster() { LLDB_INSTRUMENT_VA(this); }1920SBBroadcaster::SBBroadcaster(const char *name)21: m_opaque_sp(new Broadcaster(nullptr, name)) {22LLDB_INSTRUMENT_VA(this, name);2324m_opaque_ptr = m_opaque_sp.get();25}2627SBBroadcaster::SBBroadcaster(lldb_private::Broadcaster *broadcaster, bool owns)28: m_opaque_sp(owns ? broadcaster : nullptr), m_opaque_ptr(broadcaster) {}2930SBBroadcaster::SBBroadcaster(const SBBroadcaster &rhs)31: m_opaque_sp(rhs.m_opaque_sp), m_opaque_ptr(rhs.m_opaque_ptr) {32LLDB_INSTRUMENT_VA(this, rhs);33}3435const SBBroadcaster &SBBroadcaster::operator=(const SBBroadcaster &rhs) {36LLDB_INSTRUMENT_VA(this, rhs);3738if (this != &rhs) {39m_opaque_sp = rhs.m_opaque_sp;40m_opaque_ptr = rhs.m_opaque_ptr;41}42return *this;43}4445SBBroadcaster::~SBBroadcaster() { reset(nullptr, false); }4647void SBBroadcaster::BroadcastEventByType(uint32_t event_type, bool unique) {48LLDB_INSTRUMENT_VA(this, event_type, unique);4950if (m_opaque_ptr == nullptr)51return;5253if (unique)54m_opaque_ptr->BroadcastEventIfUnique(event_type);55else56m_opaque_ptr->BroadcastEvent(event_type);57}5859void SBBroadcaster::BroadcastEvent(const SBEvent &event, bool unique) {60LLDB_INSTRUMENT_VA(this, event, unique);6162if (m_opaque_ptr == nullptr)63return;6465EventSP event_sp = event.GetSP();66if (unique)67m_opaque_ptr->BroadcastEventIfUnique(event_sp);68else69m_opaque_ptr->BroadcastEvent(event_sp);70}7172void SBBroadcaster::AddInitialEventsToListener(const SBListener &listener,73uint32_t requested_events) {74LLDB_INSTRUMENT_VA(this, listener, requested_events);7576if (m_opaque_ptr)77m_opaque_ptr->AddInitialEventsToListener(listener.m_opaque_sp,78requested_events);79}8081uint32_t SBBroadcaster::AddListener(const SBListener &listener,82uint32_t event_mask) {83LLDB_INSTRUMENT_VA(this, listener, event_mask);8485if (m_opaque_ptr)86return m_opaque_ptr->AddListener(listener.m_opaque_sp, event_mask);87return 0;88}8990const char *SBBroadcaster::GetName() const {91LLDB_INSTRUMENT_VA(this);9293if (m_opaque_ptr)94return ConstString(m_opaque_ptr->GetBroadcasterName()).GetCString();95return nullptr;96}9798bool SBBroadcaster::EventTypeHasListeners(uint32_t event_type) {99LLDB_INSTRUMENT_VA(this, event_type);100101if (m_opaque_ptr)102return m_opaque_ptr->EventTypeHasListeners(event_type);103return false;104}105106bool SBBroadcaster::RemoveListener(const SBListener &listener,107uint32_t event_mask) {108LLDB_INSTRUMENT_VA(this, listener, event_mask);109110if (m_opaque_ptr)111return m_opaque_ptr->RemoveListener(listener.m_opaque_sp, event_mask);112return false;113}114115Broadcaster *SBBroadcaster::get() const { return m_opaque_ptr; }116117void SBBroadcaster::reset(Broadcaster *broadcaster, bool owns) {118if (owns)119m_opaque_sp.reset(broadcaster);120else121m_opaque_sp.reset();122m_opaque_ptr = broadcaster;123}124125bool SBBroadcaster::IsValid() const {126LLDB_INSTRUMENT_VA(this);127return this->operator bool();128}129SBBroadcaster::operator bool() const {130LLDB_INSTRUMENT_VA(this);131132return m_opaque_ptr != nullptr;133}134135void SBBroadcaster::Clear() {136LLDB_INSTRUMENT_VA(this);137138m_opaque_sp.reset();139m_opaque_ptr = nullptr;140}141142bool SBBroadcaster::operator==(const SBBroadcaster &rhs) const {143LLDB_INSTRUMENT_VA(this, rhs);144145return m_opaque_ptr == rhs.m_opaque_ptr;146}147148bool SBBroadcaster::operator!=(const SBBroadcaster &rhs) const {149LLDB_INSTRUMENT_VA(this, rhs);150151return m_opaque_ptr != rhs.m_opaque_ptr;152}153154bool SBBroadcaster::operator<(const SBBroadcaster &rhs) const {155LLDB_INSTRUMENT_VA(this, rhs);156157return m_opaque_ptr < rhs.m_opaque_ptr;158}159160161