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 liblldb_Host_Common_IOObject_h_
10 #define liblldb_Host_Common_IOObject_h_
11 
12 #include <stdarg.h>
13 #include <stdio.h>
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 
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 
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   DISALLOW_COPY_AND_ASSIGN(IOObject);
49 };
50 } // namespace lldb_private
51 
52 #endif
53