]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - contrib/llvm/tools/lldb/source/Utility/KQueue.h
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / contrib / llvm / tools / lldb / source / Utility / KQueue.h
1 //===--------------------- KQueue.h -----------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 #ifndef utility_KQueue_h_
11 #define utility_KQueue_h_
12
13 #if defined(__APPLE__)
14 #define LLDB_USE_KQUEUES
15 #endif
16
17 #ifdef LLDB_USE_KQUEUES
18
19 #include <sys/types.h>
20 #include <sys/event.h>
21 #include <sys/time.h>
22
23 #include "lldb/lldb-defines.h"
24
25 namespace lldb_private {
26
27 class KQueue
28 {
29 public:
30     KQueue() :
31         m_fd(-1)
32     {
33     }
34
35     ~KQueue()
36     {
37         Close();
38     }
39     
40     bool
41     IsValid () const
42     {
43         return m_fd >= 0;
44     }
45
46     int
47     GetFD (bool can_create);
48
49     int
50     Close ();
51
52     bool
53     AddFDEvent (int fd,
54                 bool read,
55                 bool write,
56                 bool vnode);
57
58     int
59     WaitForEvents (struct kevent *events,
60                    int num_events,
61                    Error &error,
62                    uint32_t timeout_usec = UINT32_MAX); // UINT32_MAX means infinite timeout
63
64 protected:
65     int m_fd; // The kqueue fd
66 };
67
68 } // namespace lldb_private
69
70 #endif // #ifdef LLDB_USE_KQUEUES
71
72 #endif // #ifndef utility_KQueue_h_