00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00018
00019 #ifndef NET_INSTAWEB_UTIL_PUBLIC_ATOMIC_INT32_H_
00020 #define NET_INSTAWEB_UTIL_PUBLIC_ATOMIC_INT32_H_
00021
00022 #include "net/instaweb/util/public/atomicops.h"
00023 #include "net/instaweb/util/public/basictypes.h"
00024
00025 namespace net_instaweb {
00026
00031
00032 class AtomicInt32 {
00033 public:
00034 explicit AtomicInt32(int32 value) {
00035 set_value(value);
00036 }
00037 AtomicInt32() {
00038 set_value(0);
00039 }
00040 ~AtomicInt32() {}
00041
00042 int32 value() const {
00043 return base::subtle::Acquire_Load(&value_);
00044 }
00045
00046 int32 increment(int32 amount) {
00047 return base::subtle::NoBarrier_AtomicIncrement(&value_, amount);
00048 }
00049
00050 void set_value(int32 value) {
00051 base::subtle::Release_Store(&value_, value);
00052 }
00053
00054 private:
00055 base::subtle::AtomicWord value_;
00056 DISALLOW_COPY_AND_ASSIGN(AtomicInt32);
00057 };
00058
00059 }
00060
00061 #endif ///< NET_INSTAWEB_UTIL_PUBLIC_ATOMIC_INT32_H_