1*969ed3d1SCaroline Tice //===-- StreamBroadcast.cpp -------------------------------------*- C++ -*-===//
2*969ed3d1SCaroline Tice //
3*969ed3d1SCaroline Tice //                     The LLVM Compiler Infrastructure
4*969ed3d1SCaroline Tice //
5*969ed3d1SCaroline Tice // This file is distributed under the University of Illinois Open Source
6*969ed3d1SCaroline Tice // License. See LICENSE.TXT for details.
7*969ed3d1SCaroline Tice //
8*969ed3d1SCaroline Tice //===----------------------------------------------------------------------===//
9*969ed3d1SCaroline Tice 
10*969ed3d1SCaroline Tice #include <stdio.h>
11*969ed3d1SCaroline Tice 
12*969ed3d1SCaroline Tice #include "lldb/lldb-private.h"
13*969ed3d1SCaroline Tice #include "lldb/Core/Broadcaster.h"
14*969ed3d1SCaroline Tice #include "lldb/Core/Event.h"
15*969ed3d1SCaroline Tice #include "lldb/Core/StreamAsynchronousIO.h"
16*969ed3d1SCaroline Tice 
17*969ed3d1SCaroline Tice using namespace lldb;
18*969ed3d1SCaroline Tice using namespace lldb_private;
19*969ed3d1SCaroline Tice 
20*969ed3d1SCaroline Tice 
21*969ed3d1SCaroline Tice StreamAsynchronousIO::StreamAsynchronousIO (Broadcaster &broadcaster, uint32_t broadcast_event_type) :
22*969ed3d1SCaroline Tice     Stream (0, 4, eByteOrderBig),
23*969ed3d1SCaroline Tice     m_broadcaster (broadcaster),
24*969ed3d1SCaroline Tice     m_broadcast_event_type (broadcast_event_type),
25*969ed3d1SCaroline Tice     m_accumulated_data ()
26*969ed3d1SCaroline Tice {
27*969ed3d1SCaroline Tice }
28*969ed3d1SCaroline Tice 
29*969ed3d1SCaroline Tice StreamAsynchronousIO::~StreamAsynchronousIO ()
30*969ed3d1SCaroline Tice {
31*969ed3d1SCaroline Tice }
32*969ed3d1SCaroline Tice 
33*969ed3d1SCaroline Tice void
34*969ed3d1SCaroline Tice StreamAsynchronousIO::Flush ()
35*969ed3d1SCaroline Tice {
36*969ed3d1SCaroline Tice     if (m_accumulated_data.GetSize() > 0)
37*969ed3d1SCaroline Tice     {
38*969ed3d1SCaroline Tice         std::auto_ptr<EventDataBytes> data_bytes_ap (new EventDataBytes);
39*969ed3d1SCaroline Tice         // Let's swap the bytes to avoid LARGE string copies.
40*969ed3d1SCaroline Tice         data_bytes_ap->SwapBytes (m_accumulated_data.GetString());
41*969ed3d1SCaroline Tice         EventSP new_event_sp (new Event (m_broadcast_event_type, data_bytes_ap.release()));
42*969ed3d1SCaroline Tice         m_broadcaster.BroadcastEvent (new_event_sp);
43*969ed3d1SCaroline Tice         m_accumulated_data.Clear();
44*969ed3d1SCaroline Tice     }
45*969ed3d1SCaroline Tice }
46*969ed3d1SCaroline Tice 
47*969ed3d1SCaroline Tice int
48*969ed3d1SCaroline Tice StreamAsynchronousIO::Write (const void *s, size_t length)
49*969ed3d1SCaroline Tice {
50*969ed3d1SCaroline Tice     m_accumulated_data.Write (s, length);
51*969ed3d1SCaroline Tice     return length;
52*969ed3d1SCaroline Tice }
53