From 7bb17430970782ddd2f0f6ee3b2975dac9b0b5aa Mon Sep 17 00:00:00 2001
From: Yichao Yu <yyc1992@gmail.com>
Date: Sun, 25 May 2014 23:39:57 -0400
Subject: [PATCH] enqueue_wait_for_events

---
 pyopencl/c_wrapper/wrap_cl_core.h |  2 ++
 pyopencl/cffi_cl.py               | 12 +++++++++---
 src/c_wrapper/wrap_cl.cpp         | 12 ++++++++++++
 3 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/pyopencl/c_wrapper/wrap_cl_core.h b/pyopencl/c_wrapper/wrap_cl_core.h
index 84da8e42..6f707c64 100644
--- a/pyopencl/c_wrapper/wrap_cl_core.h
+++ b/pyopencl/c_wrapper/wrap_cl_core.h
@@ -135,6 +135,8 @@ error *enqueue_marker_with_wait_list(clobj_t *event, clobj_t queue,
 error *enqueue_barrier_with_wait_list(clobj_t *event, clobj_t queue,
                                       const clobj_t *wait_for,
                                       uint32_t num_wait_for);
+error *enqueue_wait_for_events(clobj_t _queue, const clobj_t *_wait_for,
+                               uint32_t num_wait_for);
 error *enqueue_marker(clobj_t *event, clobj_t queue);
 error *enqueue_barrier(clobj_t queue);
 
diff --git a/pyopencl/cffi_cl.py b/pyopencl/cffi_cl.py
index 835a7027..2f522783 100644
--- a/pyopencl/cffi_cl.py
+++ b/pyopencl/cffi_cl.py
@@ -704,9 +704,6 @@ class NannyEvent(Event):
         return _find_obj(_lib.nanny_event__get_ward(self.ptr))
 
 # TODO
-#   NannyEvent
-#   wait_for_events
-#   enqueue_wait_for_events
 #   UserEvent
 #   enqueue_migrate_mem_objects
 #   enqueue_migrate_mem_objects_ext
@@ -812,6 +809,15 @@ def _enqueue_barrier(queue):
 
 # }}}
 
+# {{{ _enqueue_wait_for_events
+
+def _enqueue_wait_for_events(queue, wait_for=None):
+    c_wait_for, num_wait_for = _clobj_list(wait_for)
+    _handle_error(_lib.enqueue_wait_for_events(queue.ptr, c_wait_for,
+                                               num_wait_for))
+
+# }}}
+
 # {{{ _enqueue_*_buffer
 
 def _enqueue_read_buffer(queue, mem, hostbuf, device_offset=0,
diff --git a/src/c_wrapper/wrap_cl.cpp b/src/c_wrapper/wrap_cl.cpp
index 3f7fa288..894642d3 100644
--- a/src/c_wrapper/wrap_cl.cpp
+++ b/src/c_wrapper/wrap_cl.cpp
@@ -2418,6 +2418,18 @@ enqueue_barrier_with_wait_list(clobj_t *_evt, clobj_t _queue,
 }
 #endif
 
+error*
+enqueue_wait_for_events(clobj_t _queue, const clobj_t *_wait_for,
+                        uint32_t num_wait_for)
+{
+    auto queue = static_cast<command_queue*>(_queue);
+    auto wait_for = buf_from_class<event>(_wait_for, num_wait_for);
+    return c_handle_error([&] {
+            pyopencl_call_guarded(clEnqueueWaitForEvents, queue->data(),
+                                  num_wait_for, wait_for.get());
+        });
+}
+
 error*
 enqueue_marker(clobj_t *_evt, clobj_t _queue)
 {
-- 
GitLab