• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef CHROME_BROWSER_SYNC_UTIL_DBGQ_H_
6 #define CHROME_BROWSER_SYNC_UTIL_DBGQ_H_
7 #pragma once
8 
9 #include "base/basictypes.h"  // for COMPILE_ASSERT
10 
11 // A circular queue that is designed to be easily inspectable in a debugger. It
12 // puts the elements into the array in reverse, so you can just look at the i_
13 // pointer for a recent history.
14 template <typename T, size_t size>
15 class DebugQueue {
16   COMPILE_ASSERT(size > 0, DebugQueue_size_must_be_greater_than_zero);
17  public:
DebugQueue()18   DebugQueue() : i_(array_) { }
Push(const T & t)19   void Push(const T& t) {
20     i_ = (array_ == i_ ? array_ + size - 1 : i_ - 1);
21     *i_ = t;
22   }
23  protected:
24   T* i_;  // Points to the newest element in the queue.
25   T array_[size];
26 };
27 
28 #endif  // CHROME_BROWSER_SYNC_UTIL_DBGQ_H_
29