1969ed3d1SCaroline Tice //===-- StreamBroadcast.cpp -------------------------------------*- C++ -*-===//
2969ed3d1SCaroline Tice //
3969ed3d1SCaroline Tice //                     The LLVM Compiler Infrastructure
4969ed3d1SCaroline Tice //
5969ed3d1SCaroline Tice // This file is distributed under the University of Illinois Open Source
6969ed3d1SCaroline Tice // License. See LICENSE.TXT for details.
7969ed3d1SCaroline Tice //
8969ed3d1SCaroline Tice //===----------------------------------------------------------------------===//
9969ed3d1SCaroline Tice 
10969ed3d1SCaroline Tice #include <stdio.h>
11969ed3d1SCaroline Tice 
12969ed3d1SCaroline Tice #include "lldb/lldb-private.h"
13969ed3d1SCaroline Tice #include "lldb/Core/Broadcaster.h"
14969ed3d1SCaroline Tice #include "lldb/Core/Event.h"
15969ed3d1SCaroline Tice #include "lldb/Core/StreamAsynchronousIO.h"
16969ed3d1SCaroline Tice 
17969ed3d1SCaroline Tice using namespace lldb;
18969ed3d1SCaroline Tice using namespace lldb_private;
19969ed3d1SCaroline Tice 
20969ed3d1SCaroline Tice 
21969ed3d1SCaroline Tice StreamAsynchronousIO::StreamAsynchronousIO (Broadcaster &broadcaster, uint32_t broadcast_event_type) :
22969ed3d1SCaroline Tice     Stream (0, 4, eByteOrderBig),
23969ed3d1SCaroline Tice     m_broadcaster (broadcaster),
24969ed3d1SCaroline Tice     m_broadcast_event_type (broadcast_event_type),
25969ed3d1SCaroline Tice     m_accumulated_data ()
26969ed3d1SCaroline Tice {
27969ed3d1SCaroline Tice }
28969ed3d1SCaroline Tice 
29969ed3d1SCaroline Tice StreamAsynchronousIO::~StreamAsynchronousIO ()
30969ed3d1SCaroline Tice {
31969ed3d1SCaroline Tice }
32969ed3d1SCaroline Tice 
33969ed3d1SCaroline Tice void
34969ed3d1SCaroline Tice StreamAsynchronousIO::Flush ()
35969ed3d1SCaroline Tice {
36969ed3d1SCaroline Tice     if (m_accumulated_data.GetSize() > 0)
37969ed3d1SCaroline Tice     {
38969ed3d1SCaroline Tice         std::auto_ptr<EventDataBytes> data_bytes_ap (new EventDataBytes);
39969ed3d1SCaroline Tice         // Let's swap the bytes to avoid LARGE string copies.
40969ed3d1SCaroline Tice         data_bytes_ap->SwapBytes (m_accumulated_data.GetString());
41969ed3d1SCaroline Tice         EventSP new_event_sp (new Event (m_broadcast_event_type, data_bytes_ap.release()));
42969ed3d1SCaroline Tice         m_broadcaster.BroadcastEvent (new_event_sp);
43969ed3d1SCaroline Tice         m_accumulated_data.Clear();
44969ed3d1SCaroline Tice     }
45969ed3d1SCaroline Tice }
46969ed3d1SCaroline Tice 
47*c7bece56SGreg Clayton size_t
48969ed3d1SCaroline Tice StreamAsynchronousIO::Write (const void *s, size_t length)
49969ed3d1SCaroline Tice {
50969ed3d1SCaroline Tice     m_accumulated_data.Write (s, length);
51969ed3d1SCaroline Tice     return length;
52969ed3d1SCaroline Tice }
53