1 //===-- Event.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_Event_h_
11 #define liblldb_Event_h_
18 // Other libraries and framework includes
20 #include "lldb/lldb-private.h"
21 #include "lldb/Core/ConstString.h"
22 #include "lldb/Host/Predicate.h"
23 #include "lldb/Core/Broadcaster.h"
25 namespace lldb_private {
27 //----------------------------------------------------------------------
29 //----------------------------------------------------------------------
40 virtual const ConstString &
41 GetFlavor () const = 0;
44 Dump (Stream *s) const;
48 DoOnRemoval (Event *event_ptr)
52 DISALLOW_COPY_AND_ASSIGN (EventData);
55 //----------------------------------------------------------------------
56 // lldb::EventDataBytes
57 //----------------------------------------------------------------------
58 class EventDataBytes : public EventData
61 //------------------------------------------------------------------
63 //------------------------------------------------------------------
66 EventDataBytes (const char *cstr);
68 EventDataBytes (const void *src, size_t src_len);
70 ~EventDataBytes() override;
72 //------------------------------------------------------------------
74 //------------------------------------------------------------------
76 GetFlavor () const override;
79 Dump (Stream *s) const override;
88 SetBytes (const void *src, size_t src_len);
91 SwapBytes (std::string &new_bytes);
94 SetBytesFromCString (const char *cstr);
96 //------------------------------------------------------------------
98 //------------------------------------------------------------------
99 static const EventDataBytes *
100 GetEventDataFromEvent (const Event *event_ptr);
103 GetBytesFromEvent (const Event *event_ptr);
106 GetByteSizeFromEvent (const Event *event_ptr);
108 static const ConstString &
114 DISALLOW_COPY_AND_ASSIGN (EventDataBytes);
117 class EventDataReceipt : public EventData
126 ~EventDataReceipt() override
130 static const ConstString &
133 static ConstString g_flavor("Process::ProcessEventData");
138 GetFlavor () const override
140 return GetFlavorString();
144 WaitForEventReceived (const TimeValue *abstime = nullptr, bool *timed_out = nullptr)
146 return m_predicate.WaitForValueEqualTo(true, abstime, timed_out);
150 Predicate<bool> m_predicate;
153 DoOnRemoval (Event *event_ptr) override
155 m_predicate.SetValue(true, eBroadcastAlways);
159 //----------------------------------------------------------------------
161 //----------------------------------------------------------------------
164 friend class Listener;
165 friend class EventData;
166 friend class Broadcaster::BroadcasterImpl;
169 Event(Broadcaster *broadcaster, uint32_t event_type, EventData *data = nullptr);
171 Event(Broadcaster *broadcaster, uint32_t event_type, const lldb::EventDataSP &event_data_sp);
173 Event(uint32_t event_type, EventData *data = nullptr);
175 Event(uint32_t event_type, const lldb::EventDataSP &event_data_sp);
180 Dump (Stream *s) const;
185 return m_data_sp.get();
191 return m_data_sp.get();
195 SetData (EventData *new_data)
197 m_data_sp.reset (new_data);
207 SetType (uint32_t new_type)
213 GetBroadcaster () const
215 Broadcaster::BroadcasterImplSP broadcaster_impl_sp = m_broadcaster_wp.lock();
216 if (broadcaster_impl_sp)
217 return broadcaster_impl_sp->GetBroadcaster();
223 BroadcasterIs (Broadcaster *broadcaster)
225 Broadcaster::BroadcasterImplSP broadcaster_impl_sp = m_broadcaster_wp.lock();
226 if (broadcaster_impl_sp)
227 return broadcaster_impl_sp->GetBroadcaster() == broadcaster;
239 // This is only called by Listener when it pops an event off the queue for
240 // the listener. It calls the Event Data's DoOnRemoval() method, which is
241 // virtual and can be overridden by the specific data classes.
246 // Called by Broadcaster::BroadcastEvent prior to letting all the listeners
247 // know about it update the contained broadcaster so that events can be
248 // popped off one queue and re-broadcast to others.
250 SetBroadcaster (Broadcaster *broadcaster)
252 m_broadcaster_wp = broadcaster->GetBroadcasterImpl();
255 Broadcaster::BroadcasterImplWP m_broadcaster_wp; // The broadcaster that sent this event
256 uint32_t m_type; // The bit describing this event
257 lldb::EventDataSP m_data_sp; // User specific data for this event
260 DISALLOW_COPY_AND_ASSIGN (Event);
261 Event(); // Disallow default constructor
264 } // namespace lldb_private
266 #endif // liblldb_Event_h_