1254721Semaste//===-- SBListener.h --------------------------------------------*- 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
9254721Semaste#ifndef LLDB_SBListener_h_
10254721Semaste#define LLDB_SBListener_h_
11254721Semaste
12254721Semaste#include "lldb/API/SBDefines.h"
13254721Semaste
14254721Semastenamespace lldb {
15254721Semaste
16314564Sdimclass LLDB_API SBListener {
17254721Semastepublic:
18314564Sdim  SBListener();
19254721Semaste
20314564Sdim  SBListener(const char *name);
21254721Semaste
22314564Sdim  SBListener(const SBListener &rhs);
23254721Semaste
24314564Sdim  ~SBListener();
25254721Semaste
26314564Sdim  const lldb::SBListener &operator=(const lldb::SBListener &rhs);
27254721Semaste
28314564Sdim  void AddEvent(const lldb::SBEvent &event);
29254721Semaste
30314564Sdim  void Clear();
31254721Semaste
32353358Sdim  explicit operator bool() const;
33353358Sdim
34314564Sdim  bool IsValid() const;
35254721Semaste
36314564Sdim  uint32_t StartListeningForEventClass(SBDebugger &debugger,
37314564Sdim                                       const char *broadcaster_class,
38314564Sdim                                       uint32_t event_mask);
39254721Semaste
40314564Sdim  bool StopListeningForEventClass(SBDebugger &debugger,
41314564Sdim                                  const char *broadcaster_class,
42314564Sdim                                  uint32_t event_mask);
43254721Semaste
44314564Sdim  uint32_t StartListeningForEvents(const lldb::SBBroadcaster &broadcaster,
45314564Sdim                                   uint32_t event_mask);
46254721Semaste
47314564Sdim  bool StopListeningForEvents(const lldb::SBBroadcaster &broadcaster,
48314564Sdim                              uint32_t event_mask);
49254721Semaste
50314564Sdim  // Returns true if an event was received, false if we timed out.
51314564Sdim  bool WaitForEvent(uint32_t num_seconds, lldb::SBEvent &event);
52254721Semaste
53314564Sdim  bool WaitForEventForBroadcaster(uint32_t num_seconds,
54314564Sdim                                  const lldb::SBBroadcaster &broadcaster,
55314564Sdim                                  lldb::SBEvent &sb_event);
56254721Semaste
57314564Sdim  bool WaitForEventForBroadcasterWithType(
58314564Sdim      uint32_t num_seconds, const lldb::SBBroadcaster &broadcaster,
59314564Sdim      uint32_t event_type_mask, lldb::SBEvent &sb_event);
60254721Semaste
61314564Sdim  bool PeekAtNextEvent(lldb::SBEvent &sb_event);
62254721Semaste
63314564Sdim  bool PeekAtNextEventForBroadcaster(const lldb::SBBroadcaster &broadcaster,
64314564Sdim                                     lldb::SBEvent &sb_event);
65254721Semaste
66314564Sdim  bool
67314564Sdim  PeekAtNextEventForBroadcasterWithType(const lldb::SBBroadcaster &broadcaster,
68254721Semaste                                        uint32_t event_type_mask,
69254721Semaste                                        lldb::SBEvent &sb_event);
70254721Semaste
71314564Sdim  bool GetNextEvent(lldb::SBEvent &sb_event);
72254721Semaste
73314564Sdim  bool GetNextEventForBroadcaster(const lldb::SBBroadcaster &broadcaster,
74314564Sdim                                  lldb::SBEvent &sb_event);
75314564Sdim
76314564Sdim  bool
77314564Sdim  GetNextEventForBroadcasterWithType(const lldb::SBBroadcaster &broadcaster,
78314564Sdim                                     uint32_t event_type_mask,
79314564Sdim                                     lldb::SBEvent &sb_event);
80314564Sdim
81314564Sdim  bool HandleBroadcastEvent(const lldb::SBEvent &event);
82314564Sdim
83254721Semasteprotected:
84314564Sdim  friend class SBAttachInfo;
85314564Sdim  friend class SBBroadcaster;
86314564Sdim  friend class SBCommandInterpreter;
87314564Sdim  friend class SBDebugger;
88314564Sdim  friend class SBLaunchInfo;
89314564Sdim  friend class SBTarget;
90254721Semaste
91314564Sdim  SBListener(const lldb::ListenerSP &listener_sp);
92280031Sdim
93321369Sdim  lldb::ListenerSP GetSP();
94280031Sdim
95254721Semasteprivate:
96314564Sdim  lldb_private::Listener *operator->() const;
97254721Semaste
98314564Sdim  lldb_private::Listener *get() const;
99254721Semaste
100314564Sdim  void reset(lldb::ListenerSP listener_sp);
101254721Semaste
102314564Sdim  lldb::ListenerSP m_opaque_sp;
103314564Sdim  lldb_private::Listener *m_unused_ptr;
104254721Semaste};
105254721Semaste
106254721Semaste} // namespace lldb
107254721Semaste
108314564Sdim#endif // LLDB_SBListener_h_
109