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 12 namespace mojo { 13 class Message; 14 15 namespace internal { 16 17 // A queue for Message objects. 18 class 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