diff options
Diffstat (limited to 'contrib/llvm/include/llvm/ADT/Statistic.h')
-rw-r--r-- | contrib/llvm/include/llvm/ADT/Statistic.h | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/contrib/llvm/include/llvm/ADT/Statistic.h b/contrib/llvm/include/llvm/ADT/Statistic.h index fda99c6edbc3..b8a1a2f5c4e8 100644 --- a/contrib/llvm/include/llvm/ADT/Statistic.h +++ b/contrib/llvm/include/llvm/ADT/Statistic.h @@ -54,7 +54,7 @@ public: Value = Val; return init(); } - + const Statistic &operator++() { // FIXME: This function and all those that follow carefully use an // atomic operation to update the value safely in the presence of @@ -63,41 +63,43 @@ public: sys::AtomicIncrement(&Value); return init(); } - + unsigned operator++(int) { init(); unsigned OldValue = Value; sys::AtomicIncrement(&Value); return OldValue; } - + const Statistic &operator--() { sys::AtomicDecrement(&Value); return init(); } - + unsigned operator--(int) { init(); unsigned OldValue = Value; sys::AtomicDecrement(&Value); return OldValue; } - + const Statistic &operator+=(const unsigned &V) { + if (!V) return *this; sys::AtomicAdd(&Value, V); return init(); } - + const Statistic &operator-=(const unsigned &V) { + if (!V) return *this; sys::AtomicAdd(&Value, -V); return init(); } - + const Statistic &operator*=(const unsigned &V) { sys::AtomicMul(&Value, V); return init(); } - + const Statistic &operator/=(const unsigned &V) { sys::AtomicDiv(&Value, V); return init(); |