1 //===-- StreamAsynchronousIO.h -----------------------------------*- C++-*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLDB_CORE_STREAMASYNCHRONOUSIO_H 10 #define LLDB_CORE_STREAMASYNCHRONOUSIO_H 11 12 #include "lldb/Utility/Stream.h" 13 14 #include <string> 15 16 #include <cstddef> 17 18 namespace lldb_private { 19 class Debugger; 20 21 /// A stream meant for asynchronously printing output. Output is buffered until 22 /// the stream is flushed or destroyed. Printing is handled by the currently 23 /// active IOHandler, or the debugger's output or error stream if there is none. 24 class StreamAsynchronousIO : public Stream { 25 public: 26 enum ForSTDOUT : bool { 27 STDOUT = true, 28 STDERR = false, 29 }; 30 31 StreamAsynchronousIO(Debugger &debugger, ForSTDOUT for_stdout); 32 33 ~StreamAsynchronousIO() override; 34 35 void Flush() override; 36 37 protected: 38 size_t WriteImpl(const void *src, size_t src_len) override; 39 40 private: 41 Debugger &m_debugger; 42 std::string m_data; 43 ForSTDOUT m_for_stdout; 44 }; 45 46 } // namespace lldb_private 47 48 #endif // LLDB_CORE_STREAMASYNCHRONOUSIO_H 49