124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- SBBroadcaster.h -----------------------------------------*- C++ -*-===//
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                     The LLVM Compiler Infrastructure
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details.
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef LLDB_SBBroadcaster_h_
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define LLDB_SBBroadcaster_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
135f81547fd786584b10999c087528b323b5945896Eli Friedman#include "lldb/API/SBDefines.h"
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb {
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass SBBroadcaster
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBBroadcaster ();
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBBroadcaster (const char *name);
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
24538eb82a89a68dbc57251915080bd5152b333978Greg Clayton    SBBroadcaster (const SBBroadcaster &rhs);
25538eb82a89a68dbc57251915080bd5152b333978Greg Clayton
26538eb82a89a68dbc57251915080bd5152b333978Greg Clayton    const SBBroadcaster &
27538eb82a89a68dbc57251915080bd5152b333978Greg Clayton    operator = (const SBBroadcaster &rhs);
28538eb82a89a68dbc57251915080bd5152b333978Greg Clayton
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~SBBroadcaster();
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    IsValid () const;
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
353ca95dac942597ca76101f6792f16e34e81dea1dGreg Clayton    Clear ();
363ca95dac942597ca76101f6792f16e34e81dea1dGreg Clayton
373ca95dac942597ca76101f6792f16e34e81dea1dGreg Clayton    void
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    BroadcastEventByType (uint32_t event_type, bool unique = false);
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    BroadcastEvent (const lldb::SBEvent &event, bool unique = false);
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    AddInitialEventsToListener (const lldb::SBListener &listener, uint32_t requested_events);
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    AddListener (const lldb::SBListener &listener, uint32_t event_mask);
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const char *
5049ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton    GetName () const;
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    EventTypeHasListeners (uint32_t event_type);
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    RemoveListener (const lldb::SBListener &listener, uint32_t event_mask = UINT32_MAX);
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
58422b1ae11aaec0bea88d3d2d1f4cdb0147cef0aeGreg Clayton    // This comparison is checking if the internal opaque pointer value
59422b1ae11aaec0bea88d3d2d1f4cdb0147cef0aeGreg Clayton    // is equal to that in "rhs".
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    operator == (const lldb::SBBroadcaster &rhs) const;
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
63422b1ae11aaec0bea88d3d2d1f4cdb0147cef0aeGreg Clayton    // This comparison is checking if the internal opaque pointer value
64422b1ae11aaec0bea88d3d2d1f4cdb0147cef0aeGreg Clayton    // is not equal to that in "rhs".
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    operator != (const lldb::SBBroadcaster &rhs) const;
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
68422b1ae11aaec0bea88d3d2d1f4cdb0147cef0aeGreg Clayton    // This comparison is checking if the internal opaque pointer value
69422b1ae11aaec0bea88d3d2d1f4cdb0147cef0aeGreg Clayton    // is less than that in "rhs" so SBBroadcaster objects can be contained
70422b1ae11aaec0bea88d3d2d1f4cdb0147cef0aeGreg Clayton    // in ordered containers.
71422b1ae11aaec0bea88d3d2d1f4cdb0147cef0aeGreg Clayton    bool
72422b1ae11aaec0bea88d3d2d1f4cdb0147cef0aeGreg Clayton    operator < (const lldb::SBBroadcaster &rhs) const;
73422b1ae11aaec0bea88d3d2d1f4cdb0147cef0aeGreg Clayton
7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected:
7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    friend class SBCommandInterpreter;
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    friend class SBCommunication;
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    friend class SBEvent;
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    friend class SBListener;
7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    friend class SBProcess;
8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    friend class SBTarget;
8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBBroadcaster (lldb_private::Broadcaster *broadcaster, bool owns);
8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb_private::Broadcaster *
8563094e0bb161580564954dee512955c1c79d3476Greg Clayton    get () const;
8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
8863094e0bb161580564954dee512955c1c79d3476Greg Clayton    reset (lldb_private::Broadcaster *broadcaster, bool owns);
8963094e0bb161580564954dee512955c1c79d3476Greg Clayton
9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate:
91538eb82a89a68dbc57251915080bd5152b333978Greg Clayton    lldb::BroadcasterSP m_opaque_sp;
92538eb82a89a68dbc57251915080bd5152b333978Greg Clayton    lldb_private::Broadcaster *m_opaque_ptr;
9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb
9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif  // LLDB_SBBroadcaster_h_
98