1320543Sdim//===-- IOObject.h ----------------------------------------------*- C++ -*-===//
2320543Sdim//
3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4353358Sdim// See https://llvm.org/LICENSE.txt for license information.
5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6320543Sdim//
7320543Sdim//===----------------------------------------------------------------------===//
8320543Sdim
9320543Sdim#ifndef liblldb_Host_Common_IOObject_h_
10320543Sdim#define liblldb_Host_Common_IOObject_h_
11320543Sdim
12320543Sdim#include <stdarg.h>
13320543Sdim#include <stdio.h>
14320543Sdim#include <sys/types.h>
15320543Sdim
16320543Sdim#include "lldb/lldb-private.h"
17320543Sdim
18320543Sdimnamespace lldb_private {
19320543Sdim
20320543Sdimclass IOObject {
21320543Sdimpublic:
22353358Sdim  enum FDType {
23320543Sdim    eFDTypeFile,   // Other FD requiring read/write
24320543Sdim    eFDTypeSocket, // Socket requiring send/recv
25353358Sdim  };
26320543Sdim
27320543Sdim  // TODO: On Windows this should be a HANDLE, and wait should use
28320543Sdim  // WaitForMultipleObjects
29320543Sdim  typedef int WaitableHandle;
30320543Sdim  static const WaitableHandle kInvalidHandleValue;
31320543Sdim
32360784Sdim  IOObject(FDType type) : m_fd_type(type) {}
33320543Sdim  virtual ~IOObject();
34320543Sdim
35320543Sdim  virtual Status Read(void *buf, size_t &num_bytes) = 0;
36320543Sdim  virtual Status Write(const void *buf, size_t &num_bytes) = 0;
37320543Sdim  virtual bool IsValid() const = 0;
38320543Sdim  virtual Status Close() = 0;
39320543Sdim
40320543Sdim  FDType GetFdType() const { return m_fd_type; }
41320543Sdim
42320543Sdim  virtual WaitableHandle GetWaitableHandle() = 0;
43320543Sdim
44320543Sdimprotected:
45320543Sdim  FDType m_fd_type;
46320543Sdim
47320543Sdimprivate:
48320543Sdim  DISALLOW_COPY_AND_ASSIGN(IOObject);
49320543Sdim};
50320543Sdim} // namespace lldb_private
51320543Sdim
52320543Sdim#endif
53