1 //===-- PipeBase.h -----------------------------------------------*- C++
2 //-*-===//
3 //
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
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #ifndef LLDB_HOST_PIPEBASE_H
11 #define LLDB_HOST_PIPEBASE_H
12 
13 #include <chrono>
14 #include <string>
15 
16 #include "lldb/Utility/Status.h"
17 #include "llvm/ADT/SmallVector.h"
18 #include "llvm/ADT/StringRef.h"
19 
20 namespace lldb_private {
21 class PipeBase {
22 public:
23   virtual ~PipeBase();
24 
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;
31 
32   virtual Status OpenAsReader(llvm::StringRef name,
33                               bool child_process_inherit) = 0;
34 
35   Status OpenAsWriter(llvm::StringRef name, bool child_process_inherit);
36   virtual Status
37   OpenAsWriterWithTimeout(llvm::StringRef name, bool child_process_inherit,
38                           const std::chrono::microseconds &timeout) = 0;
39 
40   virtual bool CanRead() const = 0;
41   virtual bool CanWrite() const = 0;
42 
43   virtual lldb::pipe_t GetReadPipe() const = 0;
44   virtual lldb::pipe_t GetWritePipe() const = 0;
45 
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;
52 
53   // Close both descriptors
54   virtual void Close() = 0;
55 
56   // Delete named pipe.
57   virtual Status Delete(llvm::StringRef name) = 0;
58 
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);
64 };
65 }
66 
67 #endif
68