1// Copyright 2013 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 MOJO_PUBLIC_CPP_BINDINGS_LIB_MESSAGE_QUEUE_H_ 6#define MOJO_PUBLIC_CPP_BINDINGS_LIB_MESSAGE_QUEUE_H_ 7 8#include <queue> 9 10#include "mojo/public/cpp/system/macros.h" 11 12namespace mojo { 13class Message; 14 15namespace internal { 16 17// A queue for Message objects. 18class MessageQueue { 19 public: 20 MessageQueue(); 21 ~MessageQueue(); 22 23 bool IsEmpty() const; 24 Message* Peek(); 25 26 // This method transfers ownership of |message->data| and |message->handles| 27 // to the message queue, resetting |message| in the process. 28 void Push(Message* message); 29 30 // Removes the next message from the queue, transferring ownership of its 31 // data and handles to the given |message|. 32 void Pop(Message* message); 33 34 // Removes the next message from the queue, discarding its data and handles. 35 // This is meant to be used in conjunction with |Peek|. 36 void Pop(); 37 38 private: 39 std::queue<Message*> queue_; 40 41 MOJO_DISALLOW_COPY_AND_ASSIGN(MessageQueue); 42}; 43 44} // namespace internal 45} // namespace mojo 46 47#endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_MESSAGE_QUEUE_H_ 48