#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 BOOST_COMPUTE_CL_VERSION_1_1
#define BOOST_COMPUTE_DETAIL_ATOMIC_PREFIX "atomic_"
#else
#define BOOST_COMPUTE_DETAIL_ATOMIC_PREFIX "atom_"
#endif
#endif
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")
{
}
};
} }
#endif