1254721Semaste//===-- SBBroadcaster.cpp ---------------------------------------*- C++ -*-===// 2254721Semaste// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6254721Semaste// 7254721Semaste//===----------------------------------------------------------------------===// 8254721Semaste 9353358Sdim#include "SBReproducerPrivate.h" 10344779Sdim#include "lldb/Utility/Broadcaster.h" 11254721Semaste 12254721Semaste#include "lldb/API/SBBroadcaster.h" 13314564Sdim#include "lldb/API/SBEvent.h" 14254721Semaste#include "lldb/API/SBListener.h" 15254721Semaste 16254721Semasteusing namespace lldb; 17254721Semasteusing namespace lldb_private; 18254721Semaste 19353358SdimSBBroadcaster::SBBroadcaster() : m_opaque_sp(), m_opaque_ptr(nullptr) { 20353358Sdim LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBBroadcaster); 21353358Sdim} 22254721Semaste 23314564SdimSBBroadcaster::SBBroadcaster(const char *name) 24353358Sdim : m_opaque_sp(new Broadcaster(nullptr, name)), m_opaque_ptr(nullptr) { 25353358Sdim LLDB_RECORD_CONSTRUCTOR(SBBroadcaster, (const char *), name); 26353358Sdim 27314564Sdim m_opaque_ptr = m_opaque_sp.get(); 28254721Semaste} 29254721Semaste 30314564SdimSBBroadcaster::SBBroadcaster(lldb_private::Broadcaster *broadcaster, bool owns) 31353358Sdim : m_opaque_sp(owns ? broadcaster : nullptr), m_opaque_ptr(broadcaster) {} 32254721Semaste 33314564SdimSBBroadcaster::SBBroadcaster(const SBBroadcaster &rhs) 34353358Sdim : m_opaque_sp(rhs.m_opaque_sp), m_opaque_ptr(rhs.m_opaque_ptr) { 35353358Sdim LLDB_RECORD_CONSTRUCTOR(SBBroadcaster, (const lldb::SBBroadcaster &), rhs); 36353358Sdim} 37254721Semaste 38314564Sdimconst SBBroadcaster &SBBroadcaster::operator=(const SBBroadcaster &rhs) { 39353358Sdim LLDB_RECORD_METHOD(const lldb::SBBroadcaster &, 40353358Sdim SBBroadcaster, operator=,(const lldb::SBBroadcaster &), 41353358Sdim rhs); 42353358Sdim 43314564Sdim if (this != &rhs) { 44314564Sdim m_opaque_sp = rhs.m_opaque_sp; 45314564Sdim m_opaque_ptr = rhs.m_opaque_ptr; 46314564Sdim } 47353358Sdim return LLDB_RECORD_RESULT(*this); 48254721Semaste} 49254721Semaste 50353358SdimSBBroadcaster::~SBBroadcaster() { reset(nullptr, false); } 51254721Semaste 52314564Sdimvoid SBBroadcaster::BroadcastEventByType(uint32_t event_type, bool unique) { 53353358Sdim LLDB_RECORD_METHOD(void, SBBroadcaster, BroadcastEventByType, 54353358Sdim (uint32_t, bool), event_type, unique); 55254721Semaste 56353358Sdim if (m_opaque_ptr == nullptr) 57314564Sdim return; 58254721Semaste 59314564Sdim if (unique) 60314564Sdim m_opaque_ptr->BroadcastEventIfUnique(event_type); 61314564Sdim else 62314564Sdim m_opaque_ptr->BroadcastEvent(event_type); 63254721Semaste} 64254721Semaste 65314564Sdimvoid SBBroadcaster::BroadcastEvent(const SBEvent &event, bool unique) { 66353358Sdim LLDB_RECORD_METHOD(void, SBBroadcaster, BroadcastEvent, 67353358Sdim (const lldb::SBEvent &, bool), event, unique); 68254721Semaste 69353358Sdim if (m_opaque_ptr == nullptr) 70314564Sdim return; 71254721Semaste 72314564Sdim EventSP event_sp = event.GetSP(); 73314564Sdim if (unique) 74314564Sdim m_opaque_ptr->BroadcastEventIfUnique(event_sp); 75314564Sdim else 76314564Sdim m_opaque_ptr->BroadcastEvent(event_sp); 77254721Semaste} 78254721Semaste 79314564Sdimvoid SBBroadcaster::AddInitialEventsToListener(const SBListener &listener, 80314564Sdim uint32_t requested_events) { 81353358Sdim LLDB_RECORD_METHOD(void, SBBroadcaster, AddInitialEventsToListener, 82353358Sdim (const lldb::SBListener &, uint32_t), listener, 83353358Sdim requested_events); 84353358Sdim 85314564Sdim if (m_opaque_ptr) 86314564Sdim m_opaque_ptr->AddInitialEventsToListener(listener.m_opaque_sp, 87314564Sdim requested_events); 88254721Semaste} 89254721Semaste 90314564Sdimuint32_t SBBroadcaster::AddListener(const SBListener &listener, 91314564Sdim uint32_t event_mask) { 92353358Sdim LLDB_RECORD_METHOD(uint32_t, SBBroadcaster, AddListener, 93353358Sdim (const lldb::SBListener &, uint32_t), listener, 94353358Sdim event_mask); 95353358Sdim 96314564Sdim if (m_opaque_ptr) 97314564Sdim return m_opaque_ptr->AddListener(listener.m_opaque_sp, event_mask); 98314564Sdim return 0; 99254721Semaste} 100254721Semaste 101314564Sdimconst char *SBBroadcaster::GetName() const { 102353358Sdim LLDB_RECORD_METHOD_CONST_NO_ARGS(const char *, SBBroadcaster, GetName); 103353358Sdim 104314564Sdim if (m_opaque_ptr) 105314564Sdim return m_opaque_ptr->GetBroadcasterName().GetCString(); 106353358Sdim return nullptr; 107254721Semaste} 108254721Semaste 109314564Sdimbool SBBroadcaster::EventTypeHasListeners(uint32_t event_type) { 110353358Sdim LLDB_RECORD_METHOD(bool, SBBroadcaster, EventTypeHasListeners, (uint32_t), 111353358Sdim event_type); 112353358Sdim 113314564Sdim if (m_opaque_ptr) 114314564Sdim return m_opaque_ptr->EventTypeHasListeners(event_type); 115314564Sdim return false; 116254721Semaste} 117254721Semaste 118314564Sdimbool SBBroadcaster::RemoveListener(const SBListener &listener, 119314564Sdim uint32_t event_mask) { 120353358Sdim LLDB_RECORD_METHOD(bool, SBBroadcaster, RemoveListener, 121353358Sdim (const lldb::SBListener &, uint32_t), listener, 122353358Sdim event_mask); 123353358Sdim 124314564Sdim if (m_opaque_ptr) 125314564Sdim return m_opaque_ptr->RemoveListener(listener.m_opaque_sp, event_mask); 126314564Sdim return false; 127254721Semaste} 128254721Semaste 129314564SdimBroadcaster *SBBroadcaster::get() const { return m_opaque_ptr; } 130254721Semaste 131314564Sdimvoid SBBroadcaster::reset(Broadcaster *broadcaster, bool owns) { 132314564Sdim if (owns) 133314564Sdim m_opaque_sp.reset(broadcaster); 134314564Sdim else 135314564Sdim m_opaque_sp.reset(); 136314564Sdim m_opaque_ptr = broadcaster; 137254721Semaste} 138254721Semaste 139353358Sdimbool SBBroadcaster::IsValid() const { 140353358Sdim LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBBroadcaster, IsValid); 141353358Sdim return this->operator bool(); 142353358Sdim} 143353358SdimSBBroadcaster::operator bool() const { 144353358Sdim LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBBroadcaster, operator bool); 145254721Semaste 146353358Sdim return m_opaque_ptr != nullptr; 147353358Sdim} 148353358Sdim 149314564Sdimvoid SBBroadcaster::Clear() { 150353358Sdim LLDB_RECORD_METHOD_NO_ARGS(void, SBBroadcaster, Clear); 151353358Sdim 152314564Sdim m_opaque_sp.reset(); 153353358Sdim m_opaque_ptr = nullptr; 154254721Semaste} 155254721Semaste 156314564Sdimbool SBBroadcaster::operator==(const SBBroadcaster &rhs) const { 157353358Sdim LLDB_RECORD_METHOD_CONST( 158353358Sdim bool, SBBroadcaster, operator==,(const lldb::SBBroadcaster &), rhs); 159353358Sdim 160314564Sdim return m_opaque_ptr == rhs.m_opaque_ptr; 161254721Semaste} 162254721Semaste 163314564Sdimbool SBBroadcaster::operator!=(const SBBroadcaster &rhs) const { 164353358Sdim LLDB_RECORD_METHOD_CONST( 165353358Sdim bool, SBBroadcaster, operator!=,(const lldb::SBBroadcaster &), rhs); 166353358Sdim 167314564Sdim return m_opaque_ptr != rhs.m_opaque_ptr; 168254721Semaste} 169254721Semaste 170314564Sdimbool SBBroadcaster::operator<(const SBBroadcaster &rhs) const { 171353358Sdim LLDB_RECORD_METHOD_CONST( 172353358Sdim bool, SBBroadcaster, operator<,(const lldb::SBBroadcaster &), rhs); 173353358Sdim 174314564Sdim return m_opaque_ptr < rhs.m_opaque_ptr; 175254721Semaste} 176353358Sdim 177353358Sdimnamespace lldb_private { 178353358Sdimnamespace repro { 179353358Sdim 180353358Sdimtemplate <> 181353358Sdimvoid RegisterMethods<SBBroadcaster>(Registry &R) { 182353358Sdim LLDB_REGISTER_CONSTRUCTOR(SBBroadcaster, ()); 183353358Sdim LLDB_REGISTER_CONSTRUCTOR(SBBroadcaster, (const char *)); 184353358Sdim LLDB_REGISTER_CONSTRUCTOR(SBBroadcaster, (const lldb::SBBroadcaster &)); 185353358Sdim LLDB_REGISTER_METHOD( 186353358Sdim const lldb::SBBroadcaster &, 187353358Sdim SBBroadcaster, operator=,(const lldb::SBBroadcaster &)); 188353358Sdim LLDB_REGISTER_METHOD(void, SBBroadcaster, BroadcastEventByType, 189353358Sdim (uint32_t, bool)); 190353358Sdim LLDB_REGISTER_METHOD(void, SBBroadcaster, BroadcastEvent, 191353358Sdim (const lldb::SBEvent &, bool)); 192353358Sdim LLDB_REGISTER_METHOD(void, SBBroadcaster, AddInitialEventsToListener, 193353358Sdim (const lldb::SBListener &, uint32_t)); 194353358Sdim LLDB_REGISTER_METHOD(uint32_t, SBBroadcaster, AddListener, 195353358Sdim (const lldb::SBListener &, uint32_t)); 196353358Sdim LLDB_REGISTER_METHOD_CONST(const char *, SBBroadcaster, GetName, ()); 197353358Sdim LLDB_REGISTER_METHOD(bool, SBBroadcaster, EventTypeHasListeners, 198353358Sdim (uint32_t)); 199353358Sdim LLDB_REGISTER_METHOD(bool, SBBroadcaster, RemoveListener, 200353358Sdim (const lldb::SBListener &, uint32_t)); 201353358Sdim LLDB_REGISTER_METHOD_CONST(bool, SBBroadcaster, IsValid, ()); 202353358Sdim LLDB_REGISTER_METHOD_CONST(bool, SBBroadcaster, operator bool, ()); 203353358Sdim LLDB_REGISTER_METHOD(void, SBBroadcaster, Clear, ()); 204353358Sdim LLDB_REGISTER_METHOD_CONST( 205353358Sdim bool, SBBroadcaster, operator==,(const lldb::SBBroadcaster &)); 206353358Sdim LLDB_REGISTER_METHOD_CONST( 207353358Sdim bool, SBBroadcaster, operator!=,(const lldb::SBBroadcaster &)); 208353358Sdim LLDB_REGISTER_METHOD_CONST( 209353358Sdim bool, SBBroadcaster, operator<,(const lldb::SBBroadcaster &)); 210353358Sdim} 211353358Sdim 212353358Sdim} 213353358Sdim} 214