1 //===-- PipeBase.h -----------------------------------------------*- C++
4 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5 // See https://llvm.org/LICENSE.txt for license information.
6 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
8 //===----------------------------------------------------------------------===//
10 #ifndef liblldb_Host_PipeBase_h_
11 #define liblldb_Host_PipeBase_h_
16 #include "lldb/Utility/Status.h"
17 #include "llvm/ADT/SmallVector.h"
18 #include "llvm/ADT/StringRef.h"
20 namespace lldb_private {
25 virtual Status CreateNew(bool child_process_inherit) = 0;
26 virtual Status CreateNew(llvm::StringRef name,
27 bool child_process_inherit) = 0;
28 virtual Status CreateWithUniqueName(llvm::StringRef prefix,
29 bool child_process_inherit,
30 llvm::SmallVectorImpl<char> &name) = 0;
32 virtual Status OpenAsReader(llvm::StringRef name,
33 bool child_process_inherit) = 0;
35 Status OpenAsWriter(llvm::StringRef name, bool child_process_inherit);
37 OpenAsWriterWithTimeout(llvm::StringRef name, bool child_process_inherit,
38 const std::chrono::microseconds &timeout) = 0;
40 virtual bool CanRead() const = 0;
41 virtual bool CanWrite() const = 0;
43 virtual lldb::pipe_t GetReadPipe() const = 0;
44 virtual lldb::pipe_t GetWritePipe() const = 0;
46 virtual int GetReadFileDescriptor() const = 0;
47 virtual int GetWriteFileDescriptor() const = 0;
48 virtual int ReleaseReadFileDescriptor() = 0;
49 virtual int ReleaseWriteFileDescriptor() = 0;
50 virtual void CloseReadFileDescriptor() = 0;
51 virtual void CloseWriteFileDescriptor() = 0;
53 // Close both descriptors
54 virtual void Close() = 0;
57 virtual Status Delete(llvm::StringRef name) = 0;
59 virtual Status Write(const void *buf, size_t size, size_t &bytes_written) = 0;
60 virtual Status ReadWithTimeout(void *buf, size_t size,
61 const std::chrono::microseconds &timeout,
62 size_t &bytes_read) = 0;
63 Status Read(void *buf, size_t size, size_t &bytes_read);