00001
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00032
00033 #ifndef GROOVX_RUTZ_ATOMIC_DARWIN_H_UTC20070412044456_DEFINED
00034 #define GROOVX_RUTZ_ATOMIC_DARWIN_H_UTC20070412044456_DEFINED
00035
00036 #include <libkern/OSAtomic.h>
00037 #include <limits>
00038
00039 namespace rutz
00040 {
00041
00043 class darwin_atomic_int
00044 {
00045 private:
00046 int32_t x;
00047
00048 darwin_atomic_int(const darwin_atomic_int&);
00049 darwin_atomic_int& operator=(const darwin_atomic_int&);
00050
00051 public:
00053 darwin_atomic_int() : x(0) {}
00054
00056 static int max_value() { return std::numeric_limits<int32_t>::max(); }
00057
00059 int atomic_get() const
00060 { return x; }
00061
00063 void atomic_set(int v)
00064 { x = v; }
00065
00067 void atomic_add(int i)
00068 { OSAtomicAdd32Barrier(i, &x); }
00069
00071 void atomic_sub(int i)
00072 { OSAtomicAdd32Barrier(-i, &x); }
00073
00075 bool atomic_sub_test_zero(int i)
00076 { return (OSAtomicAdd32Barrier(-i, &x) == 0); }
00077
00079 void atomic_incr()
00080 { OSAtomicAdd32Barrier(1, &x); }
00081
00083 void atomic_decr()
00084 { OSAtomicAdd32Barrier(-1, &x); }
00085
00087 bool atomic_decr_test_zero()
00088 { return (OSAtomicAdd32Barrier(-1, &x) == 0); }
00089
00091 bool atomic_incr_test_zero()
00092 { return (OSAtomicAdd32Barrier(1, &x) == 0); }
00093
00095 int atomic_add_return(int i)
00096 { return OSAtomicAdd32Barrier(i, &x); }
00097
00099 int atomic_sub_return(int i)
00100 { return OSAtomicAdd32Barrier(-i, &x); }
00101
00103 int atomic_incr_return()
00104 { return OSAtomicAdd32Barrier(1, &x); }
00105
00107 int atomic_decr_return()
00108 { return OSAtomicAdd32Barrier(-1, &x); }
00109 };
00110
00111 }
00112
00113
00114
00115
00116
00117
00118
00119
00120 static const char __attribute__((used)) vcid_groovx_rutz_atomic_darwin_h_utc20070412044456[] = "$Id: atomic_darwin.h 10065 2007-04-12 05:54:56Z rjpeters $ $HeadURL: file:
00121 #endif // !GROOVX_RUTZ_ATOMIC_DARWIN_H_UTC20070412044456DEFINED