xref: /freebsd/contrib/llvm-project/lldb/include/lldb/Utility/IOObject.h (revision fe6060f10f634930ff71b7c50291ddc610da2475)
1 //===-- IOObject.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_UTILITY_IOOBJECT_H
10 #define LLDB_UTILITY_IOOBJECT_H
11 
12 #include <cstdarg>
13 #include <cstdio>
14 #include <sys/types.h>
15 
16 #include "lldb/lldb-private.h"
17 
18 namespace lldb_private {
19 
20 class IOObject {
21 public:
22   enum FDType {
23     eFDTypeFile,   // Other FD requiring read/write
24     eFDTypeSocket, // Socket requiring send/recv
25   };
26 
27   // TODO: On Windows this should be a HANDLE, and wait should use
28   // WaitForMultipleObjects
29   typedef int WaitableHandle;
30   static const WaitableHandle kInvalidHandleValue;
31 
IOObject(FDType type)32   IOObject(FDType type) : m_fd_type(type) {}
33   virtual ~IOObject();
34 
35   virtual Status Read(void *buf, size_t &num_bytes) = 0;
36   virtual Status Write(const void *buf, size_t &num_bytes) = 0;
37   virtual bool IsValid() const = 0;
38   virtual Status Close() = 0;
39 
GetFdType()40   FDType GetFdType() const { return m_fd_type; }
41 
42   virtual WaitableHandle GetWaitableHandle() = 0;
43 
44 protected:
45   FDType m_fd_type;
46 
47 private:
48   IOObject(const IOObject &) = delete;
49   const IOObject &operator=(const IOObject &) = delete;
50 };
51 } // namespace lldb_private
52 
53 #endif
54