• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //---------------------------------------------------------------------------//
2 // Copyright (c) 2013-2014 Kyle Lutz <kyle.r.lutz@gmail.com>
3 //
4 // Distributed under the Boost Software License, Version 1.0
5 // See accompanying file LICENSE_1_0.txt or copy at
6 // http://www.boost.org/LICENSE_1_0.txt
7 //
8 // See http://boostorg.github.com/compute for more information.
9 //---------------------------------------------------------------------------//
10 
11 #ifndef BOOST_COMPUTE_USER_EVENT_HPP
12 #define BOOST_COMPUTE_USER_EVENT_HPP
13 
14 #include <boost/compute/event.hpp>
15 #include <boost/compute/context.hpp>
16 
17 namespace boost {
18 namespace compute {
19 
20 #if defined(BOOST_COMPUTE_CL_VERSION_1_1) || defined(BOOST_COMPUTE_DOXYGEN_INVOKED)
21 /// \class user_event
22 /// \brief An user-created event.
23 ///
24 /// \opencl_version_warning{1,1}
25 ///
26 /// \see event
27 class user_event : public event
28 {
29 public:
30     /// Creates a new user-event object.
31     ///
32     /// \see_opencl_ref{clCreateUserEvent}
user_event(const context & context)33     explicit user_event(const context &context)
34     {
35         cl_int error;
36         m_event = clCreateUserEvent(context.get(), &error);
37         if(!m_event){
38             BOOST_THROW_EXCEPTION(opencl_error(error));
39         }
40     }
41 
42     /// Creates a new user-event from \p other.
user_event(const user_event & other)43     user_event(const user_event &other)
44         : event(other)
45     {
46     }
47 
48     /// Copies the user-event from \p other to \c *this.
operator =(const user_event & other)49     user_event& operator=(const user_event &other)
50     {
51         event::operator=(other);
52 
53         return *this;
54     }
55 
56     #ifndef BOOST_COMPUTE_NO_RVALUE_REFERENCES
57     /// Move-constructs a new user event object from \p other.
user_event(user_event && other)58     user_event(user_event&& other) BOOST_NOEXCEPT
59         : event(std::move(other))
60     {
61     }
62 
63     /// Move-assigns the user event from \p other to \c *this.
operator =(user_event && other)64     user_event& operator=(user_event&& other) BOOST_NOEXCEPT
65     {
66         event::operator=(std::move(other));
67 
68         return *this;
69     }
70     #endif // BOOST_COMPUTE_NO_RVALUE_REFERENCES
71 
72     /// Sets the execution status for the user-event.
73     ///
74     /// \see_opencl_ref{clSetUserEventStatus}
set_status(cl_int execution_status)75     void set_status(cl_int execution_status)
76     {
77         cl_int ret = clSetUserEventStatus(m_event, execution_status);
78         if(ret != CL_SUCCESS){
79             BOOST_THROW_EXCEPTION(opencl_error(ret));
80         }
81     }
82 };
83 #endif // BOOST_COMPUTE_CL_VERSION_1_1
84 
85 } // end compute namespace
86 } // end boost namespace
87 
88 #endif // BOOST_COMPUTE_EVENT_HPP
89