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)
5e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "mojo/public/cpp/bindings/lib/message_queue.h"
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
7e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "mojo/public/cpp/bindings/message.h"
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "mojo/public/cpp/environment/logging.h"
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace mojo {
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace internal {
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)MessageQueue::MessageQueue() {
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)MessageQueue::~MessageQueue() {
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  while (!queue_.empty())
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    Pop();
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool MessageQueue::IsEmpty() const {
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return queue_.empty();
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)Message* MessageQueue::Peek() {
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  MOJO_DCHECK(!queue_.empty());
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return queue_.front();
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void MessageQueue::Push(Message* message) {
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  queue_.push(new Message());
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  queue_.back()->Swap(message);
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void MessageQueue::Pop(Message* message) {
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  MOJO_DCHECK(!queue_.empty());
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  queue_.front()->Swap(message);
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pop();
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void MessageQueue::Pop() {
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  MOJO_DCHECK(!queue_.empty());
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  delete queue_.front();
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  queue_.pop();
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace internal
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace mojo
49