blob: b6545d5932e69c0bcdb430b9de24a32e18cc2b0d [file] [log] [blame]
Jim Ingham8fdeff22012-02-21 18:22:37 +00001//===-- StreamCallback.cpp -------------------------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include <stdio.h>
11
12#include "lldb/lldb-private.h"
13#include "lldb/Core/Broadcaster.h"
14#include "lldb/Core/Event.h"
15#include "lldb/Core/StreamCallback.h"
16#include "lldb/Host/Host.h"
17
18using namespace lldb;
19using namespace lldb_private;
20
21
22StreamCallback::StreamCallback (lldb::LogOutputCallback callback, void *baton) :
23 Stream (0, 4, eByteOrderBig),
24 m_callback (callback),
25 m_baton (baton),
26 m_accumulated_data (),
27 m_collection_mutex ()
28{
29}
30
31StreamCallback::~StreamCallback ()
32{
33}
34
35StreamString &
36StreamCallback::FindStreamForThread(lldb::tid_t cur_tid)
37{
38 Mutex::Locker (m_collection_mutex);
39 collection::iterator iter, end_iter = m_accumulated_data.end();
40 iter = m_accumulated_data.find (cur_tid);
41 if (iter == m_accumulated_data.end())
42 {
43 std::pair<collection::iterator, bool> ret;
44 ret = m_accumulated_data.insert(std::pair<lldb::tid_t,StreamString>(cur_tid, StreamString()));
45 iter = ret.first;
46 }
47 return (*iter).second;
48}
49
50void
51StreamCallback::Flush ()
52{
53 lldb::tid_t cur_tid = Host::GetCurrentThreadID();
54 StreamString &out_stream = FindStreamForThread(cur_tid);
55 m_callback (out_stream.GetData(), m_baton);
56 out_stream.Clear();
57}
58
59int
60StreamCallback::Write (const void *s, size_t length)
61{
62 lldb::tid_t cur_tid = Host::GetCurrentThreadID();
63 FindStreamForThread(cur_tid).Write (s, length);
64 return length;
65}