1c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be 3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file. 4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#ifndef BASE_ATOMIC_SEQUENCE_NUM_H_ 6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define BASE_ATOMIC_SEQUENCE_NUM_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/atomicops.h" 10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/basictypes.h" 11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace base { 13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass AtomicSequenceNumber { 15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott public: 16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott AtomicSequenceNumber() : seq_(0) { } 17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott explicit AtomicSequenceNumber(base::LinkerInitialized x) { /* seq_ is 0 */ } 18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int GetNext() { 20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return static_cast<int>( 21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott base::subtle::NoBarrier_AtomicIncrement(&seq_, 1) - 1); 22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott private: 25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott base::subtle::Atomic32 seq_; 26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott DISALLOW_COPY_AND_ASSIGN(AtomicSequenceNumber); 27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}; 28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} // namespace base 30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif // BASE_ATOMIC_SEQUENCE_NUM_H_ 32