| Index: base/atomic_sequence_num.h
|
| diff --git a/base/atomic_sequence_num.h b/base/atomic_sequence_num.h
|
| index 11805a0ae501b37207342dd33fae76604569baae..e813c9bac8bcdfb59a2cd43ccf4fe9e31b090ef3 100644
|
| --- a/base/atomic_sequence_num.h
|
| +++ b/base/atomic_sequence_num.h
|
| @@ -11,18 +11,48 @@
|
|
|
| namespace base {
|
|
|
| -class AtomicSequenceNumber {
|
| +class AtomicSequenceNumber;
|
| +
|
| +// Static (POD) AtomicSequenceNumber that MUST be used in global scope (or
|
| +// non-function scope) ONLY. This implementation does not generate any static
|
| +// initializer. Note that it does not implement any constructor which means
|
| +// that its fields are not initialized except when it is stored in the global
|
| +// data section (.data in ELF). If you want to allocate an atomic sequence
|
| +// number on the stack (or heap), please use the AtomicSequenceNumber class
|
| +// declared below.
|
| +class StaticAtomicSequenceNumber {
|
| public:
|
| - AtomicSequenceNumber() : seq_(0) { }
|
| - explicit AtomicSequenceNumber(base::LinkerInitialized x) { /* seq_ is 0 */ }
|
| -
|
| - int GetNext() {
|
| + inline int GetNext() {
|
| return static_cast<int>(
|
| base::subtle::NoBarrier_AtomicIncrement(&seq_, 1) - 1);
|
| }
|
|
|
| private:
|
| + friend class AtomicSequenceNumber;
|
| +
|
| + inline void Reset() {
|
| + base::subtle::Release_Store(&seq_, 0);
|
| + }
|
| +
|
| base::subtle::Atomic32 seq_;
|
| +};
|
| +
|
| +// AtomicSequenceNumber that can be stored and used safely (i.e. its fields are
|
| +// always initialized as opposed to StaticAtomicSequenceNumber declared above).
|
| +// Please use StaticAtomicSequenceNumber if you want to declare an atomic
|
| +// sequence number in the global scope.
|
| +class AtomicSequenceNumber {
|
| + public:
|
| + AtomicSequenceNumber() {
|
| + seq_.Reset();
|
| + }
|
| +
|
| + inline int GetNext() {
|
| + return seq_.GetNext();
|
| + }
|
| +
|
| + private:
|
| + StaticAtomicSequenceNumber seq_;
|
| DISALLOW_COPY_AND_ASSIGN(AtomicSequenceNumber);
|
| };
|
|
|
|
|