00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef RAUL_ATOMIC_PTR_HPP
00019 #define RAUL_ATOMIC_PTR_HPP
00020
00021 #include <glib.h>
00022
00023 namespace Raul {
00024
00025
00026 template<typename T>
00027 class AtomicPtr {
00028 public:
00029
00030 inline AtomicPtr()
00031 { g_atomic_pointer_set(&_val, NULL); }
00032
00033 inline AtomicPtr(const AtomicPtr& copy)
00034 { g_atomic_pointer_set(&_val, copy.get()); }
00035
00036 inline T* get() const
00037 { return (T*)g_atomic_pointer_get(&_val); }
00038
00039 inline void operator=(T* val)
00040 { g_atomic_pointer_set(&_val, val); }
00041
00043 inline bool compare_and_exchange(int oldval, int newval)
00044 { return g_atomic_pointer_compare_and_exchange(&_val, oldval, newval); }
00045
00046 private:
00047 volatile T* _val;
00048 };
00049
00050
00051 }
00052
00053 #endif // RAUL_ATOMIC_PTR_HPP