1 //===-- Event.cpp -----------------------------------------------*- 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 //===----------------------------------------------------------------------===//
12 // Other libraries and framework includes
14 #include "lldb/Core/Event.h"
15 #include "lldb/Core/Broadcaster.h"
16 #include "lldb/Core/DataExtractor.h"
17 #include "lldb/Core/Log.h"
18 #include "lldb/Core/State.h"
19 #include "lldb/Core/Stream.h"
20 #include "lldb/Host/Endian.h"
21 #include "lldb/Target/Process.h"
25 using namespace lldb_private;
27 //----------------------------------------------------------------------
29 //----------------------------------------------------------------------
30 Event::Event (Broadcaster *broadcaster, uint32_t event_type, EventData *data) :
31 m_broadcaster (broadcaster),
37 Event::Event(uint32_t event_type, EventData *data) :
38 m_broadcaster (NULL), // Set by the broadcaster when this event gets broadcast
45 //----------------------------------------------------------------------
47 //----------------------------------------------------------------------
53 Event::Dump (Stream *s) const
57 StreamString event_name;
58 if (m_broadcaster->GetEventNames (event_name, m_type, false))
59 s->Printf("%p Event: broadcaster = %p (%s), type = 0x%8.8x (%s), data = ",
62 m_broadcaster->GetBroadcasterName().GetCString(),
64 event_name.GetString().c_str());
66 s->Printf("%p Event: broadcaster = %p (%s), type = 0x%8.8x, data = ",
69 m_broadcaster->GetBroadcasterName().GetCString(),
73 s->Printf("%p Event: broadcaster = NULL, type = 0x%8.8x, data = ", this, m_type);
75 if (m_data_ap.get() == NULL)
89 m_data_ap->DoOnRemoval (this);
92 EventData::EventData()
96 EventData::~EventData()
101 EventData::Dump (Stream *s) const
103 s->PutCString ("Generic Event Data");
106 EventDataBytes::EventDataBytes () :
111 EventDataBytes::EventDataBytes (const char *cstr) :
114 SetBytesFromCString (cstr);
117 EventDataBytes::EventDataBytes (const void *src, size_t src_len) :
120 SetBytes (src, src_len);
123 EventDataBytes::~EventDataBytes()
128 EventDataBytes::GetFlavorString ()
130 static ConstString g_flavor ("EventDataBytes");
135 EventDataBytes::GetFlavor () const
137 return EventDataBytes::GetFlavorString ();
141 EventDataBytes::Dump (Stream *s) const
143 size_t num_printable_chars = std::count_if (m_bytes.begin(), m_bytes.end(), isprint);
144 if (num_printable_chars == m_bytes.size())
146 s->Printf("\"%s\"", m_bytes.c_str());
148 else if (m_bytes.size() > 0)
151 data.SetData(&m_bytes[0], m_bytes.size(), lldb::endian::InlHostByteOrder());
152 data.Dump(s, 0, eFormatBytes, 1, m_bytes.size(), 32, LLDB_INVALID_ADDRESS, 0, 0);
157 EventDataBytes::GetBytes() const
165 EventDataBytes::GetByteSize() const
167 return m_bytes.size ();
171 EventDataBytes::SetBytes (const void *src, size_t src_len)
173 if (src && src_len > 0)
174 m_bytes.assign ((const char *)src, src_len);
180 EventDataBytes::SetBytesFromCString (const char *cstr)
183 m_bytes.assign (cstr);
190 EventDataBytes::GetBytesFromEvent (const Event *event_ptr)
192 const EventDataBytes *e = GetEventDataFromEvent (event_ptr);
194 return e->GetBytes();
199 EventDataBytes::GetByteSizeFromEvent (const Event *event_ptr)
201 const EventDataBytes *e = GetEventDataFromEvent (event_ptr);
203 return e->GetByteSize();
207 const EventDataBytes *
208 EventDataBytes::GetEventDataFromEvent (const Event *event_ptr)
212 const EventData *event_data = event_ptr->GetData();
213 if (event_data && event_data->GetFlavor() == EventDataBytes::GetFlavorString())
214 return static_cast <const EventDataBytes *> (event_data);
220 EventDataBytes::SwapBytes (std::string &new_bytes)
222 m_bytes.swap (new_bytes);