diff options
Diffstat (limited to 'boost/compute/functional/atomic.hpp')
-rw-r--r-- | boost/compute/functional/atomic.hpp | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/boost/compute/functional/atomic.hpp b/boost/compute/functional/atomic.hpp new file mode 100644 index 0000000000..2701561bc3 --- /dev/null +++ b/boost/compute/functional/atomic.hpp @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2013 Kyle Lutz <kyle.r.lutz@gmail.com> +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +// See http://boostorg.github.com/compute for more information. +//---------------------------------------------------------------------------// + +#ifndef BOOST_COMPUTE_FUNCTIONAL_ATOMIC_HPP +#define BOOST_COMPUTE_FUNCTIONAL_ATOMIC_HPP + +#include <boost/compute/cl.hpp> +#include <boost/compute/function.hpp> + +#ifndef BOOST_COMPUTE_DOXYGEN_INVOKED +#ifdef CL_VERSION_1_1 + #define BOOST_COMPUTE_DETAIL_ATOMIC_PREFIX "atomic_" +#else + #define BOOST_COMPUTE_DETAIL_ATOMIC_PREFIX "atom_" +#endif +#endif // BOOST_COMPUTE_DOXYGEN_INVOKED + +namespace boost { +namespace compute { + +template<class T> +class atomic_add : public function<T (T*, T)> +{ +public: + atomic_add() + : function<T (T*, T)>(BOOST_COMPUTE_DETAIL_ATOMIC_PREFIX "add") + { + } +}; + +template<class T> +class atomic_sub : public function<T (T*, T)> +{ +public: + atomic_sub() + : function<T (T*, T)>(BOOST_COMPUTE_DETAIL_ATOMIC_PREFIX "sub") + { + } +}; + +template<class T> +class atomic_xchg : public function<T (T*, T)> +{ +public: + atomic_xchg() + : function<T (T*, T)>(BOOST_COMPUTE_DETAIL_ATOMIC_PREFIX "xchg") + { + } +}; + +template<class T> +class atomic_inc : public function<T (T*)> +{ +public: + atomic_inc() + : function<T (T*)>(BOOST_COMPUTE_DETAIL_ATOMIC_PREFIX "inc") + { + } +}; + +template<class T> +class atomic_dec : public function<T (T*)> +{ +public: + atomic_dec() + : function<T (T*)>(BOOST_COMPUTE_DETAIL_ATOMIC_PREFIX "dec") + { + } +}; + +template<class T> +class atomic_cmpxchg : public function<T (T*, T, T)> +{ +public: + atomic_cmpxchg() + : function<T (T*, T, T)>(BOOST_COMPUTE_DETAIL_ATOMIC_PREFIX "cmpxchg") + { + } +}; + +template<class T> +class atomic_max : public function<T (T*, T)> +{ +public: + atomic_max() + : function<T (T*, T)>(BOOST_COMPUTE_DETAIL_ATOMIC_PREFIX "max") + { + } +}; + +template<class T> +class atomic_min : public function<T (T*, T)> +{ +public: + atomic_min() + : function<T (T*, T)>(BOOST_COMPUTE_DETAIL_ATOMIC_PREFIX "min") + { + } +}; + +template<class T> +class atomic_and : public function<T (T*, T)> +{ +public: + atomic_and() + : function<T (T*, T)>(BOOST_COMPUTE_DETAIL_ATOMIC_PREFIX "and") + { + } +}; + +template<class T> +class atomic_or : public function<T (T*, T)> +{ +public: + atomic_or() + : function<T (T*, T)>(BOOST_COMPUTE_DETAIL_ATOMIC_PREFIX "or") + { + } +}; + +template<class T> +class atomic_xor : public function<T (T*, T)> +{ +public: + atomic_xor() + : function<T (T*, T)>(BOOST_COMPUTE_DETAIL_ATOMIC_PREFIX "xor") + { + } +}; + +} // end compute namespace +} // end boost namespace + +#endif // BOOST_COMPUTE_FUNCTIONAL_ATOMIC_HPP |