Chromium Code Reviews| Index: Source/wtf/DoubleBufferedDeque.h |
| diff --git a/Source/wtf/DoubleBufferedDeque.h b/Source/wtf/DoubleBufferedDeque.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..45ccac7b35fb408220a841b4730c7084863e5272 |
| --- /dev/null |
| +++ b/Source/wtf/DoubleBufferedDeque.h |
| @@ -0,0 +1,46 @@ |
| +// Copyright 2014 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef DoubleBufferedDeque_h |
| +#define DoubleBufferedDeque_h |
| + |
| +#include "wtf/Deque.h" |
| +#include "wtf/Noncopyable.h" |
| + |
| +namespace WTF { |
| + |
| +template <typename T> class DoubleBufferedDeque { |
|
eseidel
2014/08/12 16:16:01
I might add a small comment as to what this classs
alexclarke
2014/08/13 10:08:59
Done.
|
| + WTF_MAKE_NONCOPYABLE(DoubleBufferedDeque); |
| +public: |
| + DoubleBufferedDeque() |
| + : m_activeIndex(0) { } |
| + |
| + void append(const T& value) |
| + { |
| + m_queue[m_activeIndex].append(value); |
| + } |
| + |
| + bool isEmpty() const |
| + { |
| + return m_queue[m_activeIndex].isEmpty(); |
| + } |
| + |
| + Deque<T>& swapBuffers() |
| + { |
| + int oldIndex = m_activeIndex; |
| + m_activeIndex ^= 1; |
| + ASSERT(m_queue[m_activeIndex].isEmpty()); |
| + return m_queue[oldIndex]; |
| + } |
| + |
| +private: |
| + Deque<T> m_queue[2]; |
| + int m_activeIndex; |
| +}; |
| + |
| +} // namespace WTF |
| + |
| +using WTF::DoubleBufferedDeque; |
| + |
| +#endif // DoubleBufferedDeque_h |