1254721Semaste//===-- Event.h -------------------------------------------------*- C++ -*-===// 2254721Semaste// 3254721Semaste// The LLVM Compiler Infrastructure 4254721Semaste// 5254721Semaste// This file is distributed under the University of Illinois Open Source 6254721Semaste// License. See LICENSE.TXT for details. 7254721Semaste// 8254721Semaste//===----------------------------------------------------------------------===// 9254721Semaste 10254721Semaste#ifndef liblldb_Event_h_ 11254721Semaste#define liblldb_Event_h_ 12254721Semaste 13254721Semaste// C Includes 14254721Semaste// C++ Includes 15254721Semaste#include <list> 16254721Semaste#include <string> 17254721Semaste 18254721Semaste// Other libraries and framework includes 19254721Semaste// Project includes 20254721Semaste#include "lldb/lldb-private.h" 21254721Semaste#include "lldb/Core/ConstString.h" 22254721Semaste#include "lldb/Host/Predicate.h" 23254721Semaste 24254721Semastenamespace lldb_private { 25254721Semaste 26254721Semaste//---------------------------------------------------------------------- 27254721Semaste// lldb::EventData 28254721Semaste//---------------------------------------------------------------------- 29254721Semasteclass EventData 30254721Semaste{ 31254721Semaste friend class Event; 32254721Semaste 33254721Semastepublic: 34254721Semaste EventData (); 35254721Semaste 36254721Semaste virtual 37254721Semaste ~EventData(); 38254721Semaste 39254721Semaste virtual const ConstString & 40254721Semaste GetFlavor () const = 0; 41254721Semaste 42254721Semaste virtual void 43254721Semaste Dump (Stream *s) const; 44254721Semaste 45254721Semasteprivate: 46254721Semaste virtual void 47254721Semaste DoOnRemoval (Event *event_ptr) 48254721Semaste { 49254721Semaste } 50254721Semaste 51254721Semaste DISALLOW_COPY_AND_ASSIGN (EventData); 52254721Semaste 53254721Semaste}; 54254721Semaste 55254721Semaste//---------------------------------------------------------------------- 56254721Semaste// lldb::EventDataBytes 57254721Semaste//---------------------------------------------------------------------- 58254721Semasteclass EventDataBytes : public EventData 59254721Semaste{ 60254721Semastepublic: 61254721Semaste //------------------------------------------------------------------ 62254721Semaste // Constructors 63254721Semaste //------------------------------------------------------------------ 64254721Semaste EventDataBytes (); 65254721Semaste 66254721Semaste EventDataBytes (const char *cstr); 67254721Semaste 68254721Semaste EventDataBytes (const void *src, size_t src_len); 69254721Semaste 70254721Semaste virtual 71254721Semaste ~EventDataBytes(); 72254721Semaste 73254721Semaste //------------------------------------------------------------------ 74254721Semaste // Member functions 75254721Semaste //------------------------------------------------------------------ 76254721Semaste virtual const ConstString & 77254721Semaste GetFlavor () const; 78254721Semaste 79254721Semaste virtual void 80254721Semaste Dump (Stream *s) const; 81254721Semaste 82254721Semaste const void * 83254721Semaste GetBytes() const; 84254721Semaste 85254721Semaste size_t 86254721Semaste GetByteSize() const; 87254721Semaste 88254721Semaste void 89254721Semaste SetBytes (const void *src, size_t src_len); 90254721Semaste 91254721Semaste void 92254721Semaste SwapBytes (std::string &new_bytes); 93254721Semaste 94254721Semaste void 95254721Semaste SetBytesFromCString (const char *cstr); 96254721Semaste 97254721Semaste //------------------------------------------------------------------ 98254721Semaste // Static functions 99254721Semaste //------------------------------------------------------------------ 100254721Semaste static const EventDataBytes * 101254721Semaste GetEventDataFromEvent (const Event *event_ptr); 102254721Semaste 103254721Semaste static const void * 104254721Semaste GetBytesFromEvent (const Event *event_ptr); 105254721Semaste 106254721Semaste static size_t 107254721Semaste GetByteSizeFromEvent (const Event *event_ptr); 108254721Semaste 109254721Semaste static const ConstString & 110254721Semaste GetFlavorString (); 111254721Semaste 112254721Semasteprivate: 113254721Semaste std::string m_bytes; 114254721Semaste 115254721Semaste DISALLOW_COPY_AND_ASSIGN (EventDataBytes); 116254721Semaste 117254721Semaste}; 118254721Semaste 119254721Semaste//---------------------------------------------------------------------- 120254721Semaste// lldb::Event 121254721Semaste//---------------------------------------------------------------------- 122254721Semasteclass Event 123254721Semaste{ 124254721Semaste friend class Broadcaster; 125254721Semaste friend class Listener; 126254721Semaste friend class EventData; 127254721Semaste 128254721Semastepublic: 129254721Semaste 130254721Semaste Event (Broadcaster *broadcaster, uint32_t event_type, EventData *data = NULL); 131254721Semaste 132254721Semaste Event (uint32_t event_type, EventData *data = NULL); 133254721Semaste 134254721Semaste ~Event (); 135254721Semaste 136254721Semaste void 137254721Semaste Dump (Stream *s) const; 138254721Semaste 139254721Semaste EventData * 140254721Semaste GetData () 141254721Semaste { 142254721Semaste return m_data_ap.get(); 143254721Semaste } 144254721Semaste 145254721Semaste const EventData * 146254721Semaste GetData () const 147254721Semaste { 148254721Semaste return m_data_ap.get(); 149254721Semaste } 150254721Semaste 151254721Semaste void 152254721Semaste SetData (EventData *new_data) 153254721Semaste { 154254721Semaste m_data_ap.reset (new_data); 155254721Semaste } 156254721Semaste 157254721Semaste uint32_t 158254721Semaste GetType () const 159254721Semaste { 160254721Semaste return m_type; 161254721Semaste } 162254721Semaste 163254721Semaste void 164254721Semaste SetType (uint32_t new_type) 165254721Semaste { 166254721Semaste m_type = new_type; 167254721Semaste } 168254721Semaste 169254721Semaste Broadcaster * 170254721Semaste GetBroadcaster () const 171254721Semaste { 172254721Semaste return m_broadcaster; 173254721Semaste } 174254721Semaste 175254721Semaste bool 176254721Semaste BroadcasterIs (Broadcaster *broadcaster) 177254721Semaste { 178254721Semaste return broadcaster == m_broadcaster; 179254721Semaste } 180254721Semaste 181254721Semaste void 182254721Semaste Clear() 183254721Semaste { 184254721Semaste m_data_ap.reset(); 185254721Semaste } 186254721Semaste 187254721Semaste 188254721Semasteprivate: 189254721Semaste // This is only called by Listener when it pops an event off the queue for 190254721Semaste // the listener. It calls the Event Data's DoOnRemoval() method, which is 191254721Semaste // virtual and can be overridden by the specific data classes. 192254721Semaste 193254721Semaste void 194254721Semaste DoOnRemoval (); 195254721Semaste 196254721Semaste // Called by Broadcaster::BroadcastEvent prior to letting all the listeners 197254721Semaste // know about it update the contained broadcaster so that events can be 198254721Semaste // popped off one queue and re-broadcast to others. 199254721Semaste void 200254721Semaste SetBroadcaster (Broadcaster *broadcaster) 201254721Semaste { 202254721Semaste m_broadcaster = broadcaster; 203254721Semaste } 204254721Semaste 205254721Semaste 206254721Semaste Broadcaster * m_broadcaster; // The broadcaster that sent this event 207254721Semaste uint32_t m_type; // The bit describing this event 208254721Semaste std::unique_ptr<EventData> m_data_ap; // User specific data for this event 209254721Semaste 210254721Semaste 211254721Semaste DISALLOW_COPY_AND_ASSIGN (Event); 212254721Semaste Event(); // Disallow default constructor 213254721Semaste}; 214254721Semaste 215254721Semaste} // namespace lldb_private 216254721Semaste 217254721Semaste#endif // liblldb_Event_h_ 218