14a348081030cdd2af758fddc869518357d9befd3Caroline Tice//===-- StreamBroadcast.cpp -------------------------------------*- C++ -*-===//
24a348081030cdd2af758fddc869518357d9befd3Caroline Tice//
34a348081030cdd2af758fddc869518357d9befd3Caroline Tice//                     The LLVM Compiler Infrastructure
44a348081030cdd2af758fddc869518357d9befd3Caroline Tice//
54a348081030cdd2af758fddc869518357d9befd3Caroline Tice// This file is distributed under the University of Illinois Open Source
64a348081030cdd2af758fddc869518357d9befd3Caroline Tice// License. See LICENSE.TXT for details.
74a348081030cdd2af758fddc869518357d9befd3Caroline Tice//
84a348081030cdd2af758fddc869518357d9befd3Caroline Tice//===----------------------------------------------------------------------===//
94a348081030cdd2af758fddc869518357d9befd3Caroline Tice
104a348081030cdd2af758fddc869518357d9befd3Caroline Tice#include <stdio.h>
114a348081030cdd2af758fddc869518357d9befd3Caroline Tice
124a348081030cdd2af758fddc869518357d9befd3Caroline Tice#include "lldb/lldb-private.h"
134a348081030cdd2af758fddc869518357d9befd3Caroline Tice#include "lldb/Core/Broadcaster.h"
144a348081030cdd2af758fddc869518357d9befd3Caroline Tice#include "lldb/Core/Event.h"
154a348081030cdd2af758fddc869518357d9befd3Caroline Tice#include "lldb/Core/StreamAsynchronousIO.h"
164a348081030cdd2af758fddc869518357d9befd3Caroline Tice
174a348081030cdd2af758fddc869518357d9befd3Caroline Ticeusing namespace lldb;
184a348081030cdd2af758fddc869518357d9befd3Caroline Ticeusing namespace lldb_private;
194a348081030cdd2af758fddc869518357d9befd3Caroline Tice
204a348081030cdd2af758fddc869518357d9befd3Caroline Tice
214a348081030cdd2af758fddc869518357d9befd3Caroline TiceStreamAsynchronousIO::StreamAsynchronousIO (Broadcaster &broadcaster, uint32_t broadcast_event_type) :
224a348081030cdd2af758fddc869518357d9befd3Caroline Tice    Stream (0, 4, eByteOrderBig),
234a348081030cdd2af758fddc869518357d9befd3Caroline Tice    m_broadcaster (broadcaster),
244a348081030cdd2af758fddc869518357d9befd3Caroline Tice    m_broadcast_event_type (broadcast_event_type),
254a348081030cdd2af758fddc869518357d9befd3Caroline Tice    m_accumulated_data ()
264a348081030cdd2af758fddc869518357d9befd3Caroline Tice{
274a348081030cdd2af758fddc869518357d9befd3Caroline Tice}
284a348081030cdd2af758fddc869518357d9befd3Caroline Tice
294a348081030cdd2af758fddc869518357d9befd3Caroline TiceStreamAsynchronousIO::~StreamAsynchronousIO ()
304a348081030cdd2af758fddc869518357d9befd3Caroline Tice{
314a348081030cdd2af758fddc869518357d9befd3Caroline Tice}
324a348081030cdd2af758fddc869518357d9befd3Caroline Tice
334a348081030cdd2af758fddc869518357d9befd3Caroline Ticevoid
344a348081030cdd2af758fddc869518357d9befd3Caroline TiceStreamAsynchronousIO::Flush ()
354a348081030cdd2af758fddc869518357d9befd3Caroline Tice{
364a348081030cdd2af758fddc869518357d9befd3Caroline Tice    if (m_accumulated_data.GetSize() > 0)
374a348081030cdd2af758fddc869518357d9befd3Caroline Tice    {
38102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton        std::unique_ptr<EventDataBytes> data_bytes_ap (new EventDataBytes);
394a348081030cdd2af758fddc869518357d9befd3Caroline Tice        // Let's swap the bytes to avoid LARGE string copies.
404a348081030cdd2af758fddc869518357d9befd3Caroline Tice        data_bytes_ap->SwapBytes (m_accumulated_data.GetString());
414a348081030cdd2af758fddc869518357d9befd3Caroline Tice        EventSP new_event_sp (new Event (m_broadcast_event_type, data_bytes_ap.release()));
424a348081030cdd2af758fddc869518357d9befd3Caroline Tice        m_broadcaster.BroadcastEvent (new_event_sp);
434a348081030cdd2af758fddc869518357d9befd3Caroline Tice        m_accumulated_data.Clear();
444a348081030cdd2af758fddc869518357d9befd3Caroline Tice    }
454a348081030cdd2af758fddc869518357d9befd3Caroline Tice}
464a348081030cdd2af758fddc869518357d9befd3Caroline Tice
4736da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Claytonsize_t
484a348081030cdd2af758fddc869518357d9befd3Caroline TiceStreamAsynchronousIO::Write (const void *s, size_t length)
494a348081030cdd2af758fddc869518357d9befd3Caroline Tice{
504a348081030cdd2af758fddc869518357d9befd3Caroline Tice    m_accumulated_data.Write (s, length);
514a348081030cdd2af758fddc869518357d9befd3Caroline Tice    return length;
524a348081030cdd2af758fddc869518357d9befd3Caroline Tice}
53