12d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham//===-- StreamCallback.h -----------------------------------*- C++ -*-===// 22d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham// 32d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham// The LLVM Compiler Infrastructure 42d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham// 52d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham// This file is distributed under the University of Illinois Open Source 62d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham// License. See LICENSE.TXT for details. 72d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham// 82d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham//===----------------------------------------------------------------------===// 92d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham 102d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham#ifndef liblldb_StreamCallback_h_ 112d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham#define liblldb_StreamCallback_h_ 122d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham 132d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham#include <string> 142d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham 152d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham#include "lldb/Core/Stream.h" 162d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham#include "lldb/Core/StreamString.h" 172d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham#include "lldb/Host/Mutex.h" 182d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham 192d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Inghamnamespace lldb_private { 202d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham 212d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Inghamclass StreamCallback : 222d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham public Stream 232d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham{ 242d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Inghampublic: 252d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham StreamCallback (lldb::LogOutputCallback callback, void *baton); 262d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham 272d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham virtual ~StreamCallback (); 282d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham 292d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham virtual void 302d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham Flush (); 312d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham 3236da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton virtual size_t 332d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham Write (const void *src, size_t src_len); 342d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham 352d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham 362d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Inghamprivate: 372d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham typedef std::map<lldb::tid_t, StreamString> collection; 382d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham lldb::LogOutputCallback m_callback; 392d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham void *m_baton; 402d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham collection m_accumulated_data; 412d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham Mutex m_collection_mutex; 422d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham 432d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham StreamString &FindStreamForThread(lldb::tid_t cur_tid); 442d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham}; 452d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham 462d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham} // namespace lldb_private 472d9c2d447270048f0672280f75f76e7d62b9b5b7Jim Ingham#endif // #ifndef liblldb_StreamCallback_h 48