//===-- Broadcaster.h -------------------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef LLDB_UTILITY_BROADCASTER_H #define LLDB_UTILITY_BROADCASTER_H #include "lldb/Utility/ConstString.h" #include "lldb/lldb-defines.h" #include "lldb/lldb-forward.h" #include "llvm/ADT/SmallVector.h" #include <cstdint> #include <map> #include <memory> #include <mutex> #include <set> #include <string> #include <utility> #include <vector> namespace lldb_private { class Broadcaster; class EventData; class Listener; class Stream; } // namespace lldb_private namespace lldb_private { /// lldb::BroadcastEventSpec /// /// This class is used to specify a kind of event to register for. The /// Debugger maintains a list of BroadcastEventSpec's and when it is made class BroadcastEventSpec { … }; class BroadcasterManager : public std::enable_shared_from_this<BroadcasterManager> { … }; /// \class Broadcaster Broadcaster.h "lldb/Utility/Broadcaster.h" An event /// broadcasting class. /// /// The Broadcaster class is designed to be subclassed by objects that wish to /// vend events in a multi-threaded environment. Broadcaster objects can each /// vend 32 events. Each event is represented by a bit in a 32 bit value and /// these bits can be set: /// \see Broadcaster::SetEventBits(uint32_t) /// or cleared: /// \see Broadcaster::ResetEventBits(uint32_t) /// When an event gets set the Broadcaster object will notify the Listener /// object that is listening for the event (if there is one). /// /// Subclasses should provide broadcast bit definitions for any events they /// vend, typically using an enumeration: /// \code /// class Foo : public Broadcaster /// { /// public: /// // Broadcaster event bits definitions. /// enum /// { /// eBroadcastBitOne = (1 << 0), /// eBroadcastBitTwo = (1 << 1), /// eBroadcastBitThree = (1 << 2), /// ... /// }; /// \endcode class Broadcaster { … }; } // namespace lldb_private #endif // LLDB_UTILITY_BROADCASTER_H