xref: /freebsd/contrib/llvm-project/lldb/include/lldb/Core/StreamAsynchronousIO.h (revision 700637cbb5e582861067a11aaca4d053546871d2)
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