aboutsummaryrefslogtreecommitdiff
path: root/source/Utility/KQueue.h
diff options
context:
space:
mode:
Diffstat (limited to 'source/Utility/KQueue.h')
-rw-r--r--source/Utility/KQueue.h72
1 files changed, 72 insertions, 0 deletions
diff --git a/source/Utility/KQueue.h b/source/Utility/KQueue.h
new file mode 100644
index 000000000000..c5680aaa6314
--- /dev/null
+++ b/source/Utility/KQueue.h
@@ -0,0 +1,72 @@
+//===--------------------- KQueue.h -----------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef utility_KQueue_h_
+#define utility_KQueue_h_
+
+#if defined(__APPLE__)
+#define LLDB_USE_KQUEUES
+#endif
+
+#ifdef LLDB_USE_KQUEUES
+
+#include <sys/types.h>
+#include <sys/event.h>
+#include <sys/time.h>
+
+#include "lldb/lldb-defines.h"
+
+namespace lldb_private {
+
+class KQueue
+{
+public:
+ KQueue() :
+ m_fd(-1)
+ {
+ }
+
+ ~KQueue()
+ {
+ Close();
+ }
+
+ bool
+ IsValid () const
+ {
+ return m_fd >= 0;
+ }
+
+ int
+ GetFD (bool can_create);
+
+ int
+ Close ();
+
+ bool
+ AddFDEvent (int fd,
+ bool read,
+ bool write,
+ bool vnode);
+
+ int
+ WaitForEvents (struct kevent *events,
+ int num_events,
+ Error &error,
+ uint32_t timeout_usec = UINT32_MAX); // UINT32_MAX means infinite timeout
+
+protected:
+ int m_fd; // The kqueue fd
+};
+
+} // namespace lldb_private
+
+#endif // #ifdef LLDB_USE_KQUEUES
+
+#endif // #ifndef utility_KQueue_h_