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 liblldb_Host_PipeBase_h_
11#define liblldb_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
20namespace lldb_private {
21class PipeBase {
22public:
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