#ifndef liblldb_Event_h_
#define liblldb_Event_h_
#include <list>
#include <string>
#include "lldb/lldb-private.h"
#include "lldb/Core/ConstString.h"
#include "lldb/Host/Predicate.h"
namespace lldb_private {
class EventData
{
friend class Event;
public:
EventData ();
virtual
~EventData();
virtual const ConstString &
GetFlavor () const = 0;
virtual void
Dump (Stream *s) const;
private:
virtual void
DoOnRemoval (Event *event_ptr)
{
}
DISALLOW_COPY_AND_ASSIGN (EventData);
};
class EventDataBytes : public EventData
{
public:
EventDataBytes ();
EventDataBytes (const char *cstr);
EventDataBytes (const void *src, size_t src_len);
virtual
~EventDataBytes();
virtual const ConstString &
GetFlavor () const;
virtual void
Dump (Stream *s) const;
const void *
GetBytes() const;
size_t
GetByteSize() const;
void
SetBytes (const void *src, size_t src_len);
void
SwapBytes (std::string &new_bytes);
void
SetBytesFromCString (const char *cstr);
static const EventDataBytes *
GetEventDataFromEvent (const Event *event_ptr);
static const void *
GetBytesFromEvent (const Event *event_ptr);
static size_t
GetByteSizeFromEvent (const Event *event_ptr);
static const ConstString &
GetFlavorString ();
private:
std::string m_bytes;
DISALLOW_COPY_AND_ASSIGN (EventDataBytes);
};
class Event
{
friend class Broadcaster;
friend class Listener;
friend class EventData;
public:
Event (Broadcaster *broadcaster, uint32_t event_type, EventData *data = NULL);
Event (uint32_t event_type, EventData *data = NULL);
~Event ();
void
Dump (Stream *s) const;
EventData *
GetData ()
{
return m_data_ap.get();
}
const EventData *
GetData () const
{
return m_data_ap.get();
}
void
SetData (EventData *new_data)
{
m_data_ap.reset (new_data);
}
uint32_t
GetType () const
{
return m_type;
}
void
SetType (uint32_t new_type)
{
m_type = new_type;
}
Broadcaster *
GetBroadcaster () const
{
return m_broadcaster;
}
bool
BroadcasterIs (Broadcaster *broadcaster)
{
return broadcaster == m_broadcaster;
}
void
Clear()
{
m_data_ap.reset();
}
private:
void
DoOnRemoval ();
void
SetBroadcaster (Broadcaster *broadcaster)
{
m_broadcaster = broadcaster;
}
Broadcaster * m_broadcaster; uint32_t m_type; std::auto_ptr<EventData> m_data_ap;
DISALLOW_COPY_AND_ASSIGN (Event);
Event(); };
}
#endif // liblldb_Event_h_