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