xref: /openbsd-src/gnu/llvm/lldb/include/lldb/Host/windows/MainLoopWindows.h (revision f6aab3d83b51b91c24247ad2c2573574de475a82)
1 //===-- MainLoopWindows.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_HOST_WINDOWS_MAINLOOPWINDOWS_H
10 #define LLDB_HOST_WINDOWS_MAINLOOPWINDOWS_H
11 
12 #include "lldb/Host/Config.h"
13 #include "lldb/Host/MainLoopBase.h"
14 #include <csignal>
15 #include <list>
16 #include <vector>
17 
18 namespace lldb_private {
19 
20 // Windows-specific implementation of the MainLoopBase class. It can monitor
21 // socket descriptors for readability using WSAEventSelect. Non-socket file
22 // descriptors are not supported.
23 class MainLoopWindows : public MainLoopBase {
24 public:
25   MainLoopWindows();
26   ~MainLoopWindows() override;
27 
28   ReadHandleUP RegisterReadObject(const lldb::IOObjectSP &object_sp,
29                                   const Callback &callback,
30                                   Status &error) override;
31 
32   Status Run() override;
33 
34 protected:
35   void UnregisterReadObject(IOObject::WaitableHandle handle) override;
36 
37   void TriggerPendingCallbacks() override;
38 
39 private:
40   void ProcessReadObject(IOObject::WaitableHandle handle);
41   llvm::Expected<size_t> Poll();
42 
43   struct FdInfo {
44     void *event;
45     Callback callback;
46   };
47   llvm::DenseMap<IOObject::WaitableHandle, FdInfo> m_read_fds;
48   void *m_trigger_event;
49 };
50 
51 } // namespace lldb_private
52 
53 #endif // LLDB_HOST_WINDOWS_MAINLOOPWINDOWS_H
54