1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file.
4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "mojo/public/bindings/lib/message_queue.h"
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <assert.h>
8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <stddef.h>
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "mojo/public/bindings/lib/message.h"
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace mojo {
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)MessageQueue::MessageQueue() {
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)MessageQueue::~MessageQueue() {
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  while (!queue_.empty())
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    Pop();
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool MessageQueue::IsEmpty() const {
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return queue_.empty();
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)Message* MessageQueue::Peek() {
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  assert(!queue_.empty());
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return queue_.front();
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void MessageQueue::Push(Message* message) {
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  queue_.push(new Message());
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  queue_.back()->Swap(message);
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void MessageQueue::Pop(Message* message) {
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  assert(!queue_.empty());
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  queue_.front()->Swap(message);
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pop();
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void MessageQueue::Pop() {
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  assert(!queue_.empty());
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  delete queue_.front();
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  queue_.pop();
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace mojo
49