1 //===-- Listener.h ----------------------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef liblldb_Select_h_
11 #define liblldb_Select_h_
22 // Other libraries and framework includes
24 #include "lldb/lldb-private.h"
25 #include "lldb/Host/Predicate.h"
26 #include "lldb/Core/Event.h"
28 namespace lldb_private {
33 typedef bool (*HandleBroadcastCallback) (lldb::EventSP &event_sp, void *baton);
35 friend class Broadcaster;
36 friend class BroadcasterManager;
38 //------------------------------------------------------------------
39 // Constructors and Destructors
40 //------------------------------------------------------------------
41 Listener (const char *name);
46 AddEvent (lldb::EventSP &event);
54 return m_name.c_str();
58 StartListeningForEventSpec (BroadcasterManager &manager,
59 const BroadcastEventSpec &event_spec);
62 StopListeningForEventSpec (BroadcasterManager &manager,
63 const BroadcastEventSpec &event_spec);
66 StartListeningForEvents (Broadcaster* broadcaster,
70 StartListeningForEvents (Broadcaster* broadcaster,
72 HandleBroadcastCallback callback,
73 void *callback_user_data);
76 StopListeningForEvents (Broadcaster* broadcaster,
79 // Returns true if an event was recieved, false if we timed out.
81 WaitForEvent (const TimeValue *timeout,
82 lldb::EventSP &event_sp);
85 WaitForEventForBroadcaster (const TimeValue *timeout,
86 Broadcaster *broadcaster,
87 lldb::EventSP &event_sp);
90 WaitForEventForBroadcasterWithType (const TimeValue *timeout,
91 Broadcaster *broadcaster,
92 uint32_t event_type_mask,
93 lldb::EventSP &event_sp);
99 PeekAtNextEventForBroadcaster (Broadcaster *broadcaster);
102 PeekAtNextEventForBroadcasterWithType (Broadcaster *broadcaster,
103 uint32_t event_type_mask);
106 GetNextEvent (lldb::EventSP &event_sp);
109 GetNextEventForBroadcaster (Broadcaster *broadcaster,
110 lldb::EventSP &event_sp);
113 GetNextEventForBroadcasterWithType (Broadcaster *broadcaster,
114 uint32_t event_type_mask,
115 lldb::EventSP &event_sp);
118 HandleBroadcastEvent (lldb::EventSP &event_sp);
122 //------------------------------------------------------------------
123 // Classes that inherit from Listener can see and modify these
124 //------------------------------------------------------------------
125 struct BroadcasterInfo
127 BroadcasterInfo(uint32_t mask, HandleBroadcastCallback cb = NULL, void *ud = NULL) :
130 callback_user_data (ud)
135 HandleBroadcastCallback callback;
136 void *callback_user_data;
139 typedef std::multimap<Broadcaster*, BroadcasterInfo> broadcaster_collection;
140 typedef std::list<lldb::EventSP> event_collection;
141 typedef std::vector<BroadcasterManager *> broadcaster_manager_collection;
144 FindNextEventInternal (Broadcaster *broadcaster, // NULL for any broadcaster
145 const ConstString *sources, // NULL for any event
146 uint32_t num_sources,
147 uint32_t event_type_mask,
148 lldb::EventSP &event_sp,
152 GetNextEventInternal (Broadcaster *broadcaster, // NULL for any broadcaster
153 const ConstString *sources, // NULL for any event
154 uint32_t num_sources,
155 uint32_t event_type_mask,
156 lldb::EventSP &event_sp);
159 WaitForEventsInternal (const TimeValue *timeout,
160 Broadcaster *broadcaster, // NULL for any broadcaster
161 const ConstString *sources, // NULL for any event
162 uint32_t num_sources,
163 uint32_t event_type_mask,
164 lldb::EventSP &event_sp);
167 broadcaster_collection m_broadcasters;
168 Mutex m_broadcasters_mutex; // Protects m_broadcasters
169 event_collection m_events;
170 Mutex m_events_mutex; // Protects m_broadcasters and m_events
171 Predicate<bool> m_cond_wait;
172 broadcaster_manager_collection m_broadcaster_managers;
175 BroadcasterWillDestruct (Broadcaster *);
178 BroadcasterManagerWillDestruct (BroadcasterManager *manager);
181 // broadcaster_collection::iterator
182 // FindBroadcasterWithMask (Broadcaster *broadcaster,
183 // uint32_t event_mask,
186 //------------------------------------------------------------------
188 //------------------------------------------------------------------
189 DISALLOW_COPY_AND_ASSIGN (Listener);
192 } // namespace lldb_private
194 #endif // liblldb_Select_h_