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