1 //---------------------------------------------------------------------------//
2 // Copyright (c) 2013 Kyle Lutz <kyle.r.lutz@gmail.com>
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
8 // See http://boostorg.github.com/compute for more information.
9 //---------------------------------------------------------------------------//
11 #ifndef BOOST_COMPUTE_FUNCTIONAL_ATOMIC_HPP
12 #define BOOST_COMPUTE_FUNCTIONAL_ATOMIC_HPP
14 #include <boost/compute/cl.hpp>
15 #include <boost/compute/function.hpp>
17 #ifndef BOOST_COMPUTE_DOXYGEN_INVOKED
18 #ifdef BOOST_COMPUTE_CL_VERSION_1_1
19 #define BOOST_COMPUTE_DETAIL_ATOMIC_PREFIX "atomic_"
21 #define BOOST_COMPUTE_DETAIL_ATOMIC_PREFIX "atom_"
23 #endif // BOOST_COMPUTE_DOXYGEN_INVOKED
29 class atomic_add : public function<T (T*, T)>
33 : function<T (T*, T)>(BOOST_COMPUTE_DETAIL_ATOMIC_PREFIX "add")
39 class atomic_sub : public function<T (T*, T)>
43 : function<T (T*, T)>(BOOST_COMPUTE_DETAIL_ATOMIC_PREFIX "sub")
49 class atomic_xchg : public function<T (T*, T)>
53 : function<T (T*, T)>(BOOST_COMPUTE_DETAIL_ATOMIC_PREFIX "xchg")
59 class atomic_inc : public function<T (T*)>
63 : function<T (T*)>(BOOST_COMPUTE_DETAIL_ATOMIC_PREFIX "inc")
69 class atomic_dec : public function<T (T*)>
73 : function<T (T*)>(BOOST_COMPUTE_DETAIL_ATOMIC_PREFIX "dec")
79 class atomic_cmpxchg : public function<T (T*, T, T)>
83 : function<T (T*, T, T)>(BOOST_COMPUTE_DETAIL_ATOMIC_PREFIX "cmpxchg")
89 class atomic_max : public function<T (T*, T)>
93 : function<T (T*, T)>(BOOST_COMPUTE_DETAIL_ATOMIC_PREFIX "max")
99 class atomic_min : public function<T (T*, T)>
103 : function<T (T*, T)>(BOOST_COMPUTE_DETAIL_ATOMIC_PREFIX "min")
109 class atomic_and : public function<T (T*, T)>
113 : function<T (T*, T)>(BOOST_COMPUTE_DETAIL_ATOMIC_PREFIX "and")
119 class atomic_or : public function<T (T*, T)>
123 : function<T (T*, T)>(BOOST_COMPUTE_DETAIL_ATOMIC_PREFIX "or")
129 class atomic_xor : public function<T (T*, T)>
133 : function<T (T*, T)>(BOOST_COMPUTE_DETAIL_ATOMIC_PREFIX "xor")
138 } // end compute namespace
139 } // end boost namespace
141 #endif // BOOST_COMPUTE_FUNCTIONAL_ATOMIC_HPP