124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- SBListener.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_SBListener_h_
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define LLDB_SBListener_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
135f81547fd786584b10999c087528b323b5945896Eli Friedman#include "lldb/API/SBDefines.h"
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb {
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass SBListener
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
20538eb82a89a68dbc57251915080bd5152b333978Greg Clayton    SBListener ();
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
22538eb82a89a68dbc57251915080bd5152b333978Greg Clayton    SBListener (const char *name);
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
24538eb82a89a68dbc57251915080bd5152b333978Greg Clayton    SBListener (const SBListener &rhs);
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~SBListener ();
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
28538eb82a89a68dbc57251915080bd5152b333978Greg Clayton    const lldb::SBListener &
29538eb82a89a68dbc57251915080bd5152b333978Greg Clayton    operator = (const lldb::SBListener &rhs);
30538eb82a89a68dbc57251915080bd5152b333978Greg Clayton
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    AddEvent (const lldb::SBEvent &event);
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Clear ();
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    IsValid () const;
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t
415a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham    StartListeningForEventClass (SBDebugger &debugger,
425a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham                                 const char *broadcaster_class,
435a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham                                 uint32_t event_mask);
445a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham
455a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham    bool
465a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham    StopListeningForEventClass (SBDebugger &debugger,
475a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham                                const char *broadcaster_class,
485a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham                                uint32_t event_mask);
495a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham
505a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham    uint32_t
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    StartListeningForEvents (const lldb::SBBroadcaster& broadcaster,
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                             uint32_t event_mask);
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    StopListeningForEvents (const lldb::SBBroadcaster& broadcaster,
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                            uint32_t event_mask);
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Returns true if an event was recieved, false if we timed out.
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    WaitForEvent (uint32_t num_seconds,
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                  lldb::SBEvent &event);
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    WaitForEventForBroadcaster (uint32_t num_seconds,
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                const lldb::SBBroadcaster &broadcaster,
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                lldb::SBEvent &sb_event);
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    WaitForEventForBroadcasterWithType (uint32_t num_seconds,
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                        const lldb::SBBroadcaster &broadcaster,
7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                        uint32_t event_type_mask,
7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                        lldb::SBEvent &sb_event);
7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    PeekAtNextEvent (lldb::SBEvent &sb_event);
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    PeekAtNextEventForBroadcaster (const lldb::SBBroadcaster &broadcaster,
7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                   lldb::SBEvent &sb_event);
8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    PeekAtNextEventForBroadcasterWithType (const lldb::SBBroadcaster &broadcaster,
8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                           uint32_t event_type_mask,
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                           lldb::SBEvent &sb_event);
8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetNextEvent (lldb::SBEvent &sb_event);
8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetNextEventForBroadcaster (const lldb::SBBroadcaster &broadcaster,
9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                lldb::SBEvent &sb_event);
9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetNextEventForBroadcasterWithType (const lldb::SBBroadcaster &broadcaster,
9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                        uint32_t event_type_mask,
9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                        lldb::SBEvent &sb_event);
9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    HandleBroadcastEvent (const lldb::SBEvent &event);
10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
101538eb82a89a68dbc57251915080bd5152b333978Greg Claytonprotected:
1023f5ee7fd6991891f0892bd71537763d9b59acd12Greg Clayton    friend class SBBroadcaster;
1033f5ee7fd6991891f0892bd71537763d9b59acd12Greg Clayton    friend class SBCommandInterpreter;
1043f5ee7fd6991891f0892bd71537763d9b59acd12Greg Clayton    friend class SBDebugger;
1053f5ee7fd6991891f0892bd71537763d9b59acd12Greg Clayton    friend class SBTarget;
10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
107538eb82a89a68dbc57251915080bd5152b333978Greg Clayton    SBListener (lldb_private::Listener &listener);
108538eb82a89a68dbc57251915080bd5152b333978Greg Clayton
109538eb82a89a68dbc57251915080bd5152b333978Greg Claytonprivate:
110538eb82a89a68dbc57251915080bd5152b333978Greg Clayton
11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb_private::Listener *
11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    operator->() const;
11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb_private::Listener *
11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    get() const;
11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb_private::Listener &
118271a5db096ae183e9235ebd273c4a6aab6130b3eGreg Clayton    ref() const;
119271a5db096ae183e9235ebd273c4a6aab6130b3eGreg Clayton
120271a5db096ae183e9235ebd273c4a6aab6130b3eGreg Clayton    lldb_private::Listener &
12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    operator *();
12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const lldb_private::Listener &
12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    operator *() const;
12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
12663094e0bb161580564954dee512955c1c79d3476Greg Clayton    void
12763094e0bb161580564954dee512955c1c79d3476Greg Clayton    reset(lldb_private::Listener *listener, bool transfer_ownership);
12863094e0bb161580564954dee512955c1c79d3476Greg Clayton
129538eb82a89a68dbc57251915080bd5152b333978Greg Clayton    lldb::ListenerSP m_opaque_sp;
13063094e0bb161580564954dee512955c1c79d3476Greg Clayton    lldb_private::Listener *m_opaque_ptr;
13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb
13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif  // LLDB_SBListener_h_
136