1 // Copyright 2014 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.
5 #ifndef MOJO_SYSTEM_MESSAGE_QUEUE_H_
6 #define MOJO_SYSTEM_MESSAGE_QUEUE_H_
10 #include "base/macros.h"
11 #include "base/memory/scoped_ptr.h"
12 #include "mojo/system/message_in_transit.h"
13 #include "mojo/system/system_impl_export.h"
18 // A simple queue for |MessageInTransit|s (that owns its messages).
19 // This class is not thread-safe.
20 // TODO(vtl): Write tests.
21 class MOJO_SYSTEM_IMPL_EXPORT MessageInTransitQueue
{
23 MessageInTransitQueue();
25 struct PassContents
{};
26 // Constructor that takes over the contents of another
27 // |MessageInTransitQueue|, leaving it empty.
28 MessageInTransitQueue(PassContents
, MessageInTransitQueue
* other
);
30 ~MessageInTransitQueue();
32 bool IsEmpty() const {
33 return queue_
.empty();
36 void AddMessage(scoped_ptr
<MessageInTransit
> message
) {
37 queue_
.push_back(message
.release());
40 scoped_ptr
<MessageInTransit
> GetMessage() {
41 MessageInTransit
* rv
= queue_
.front();
43 return make_scoped_ptr(rv
);
46 MessageInTransit
* PeekMessage() {
47 return queue_
.front();
50 void DiscardMessage() {
51 delete queue_
.front();
58 // TODO(vtl): When C++11 is available, switch this to a deque of
59 // |scoped_ptr|/|unique_ptr|s.
60 std::deque
<MessageInTransit
*> queue_
;
62 DISALLOW_COPY_AND_ASSIGN(MessageInTransitQueue
);
69 #endif // MOJO_SYSTEM_MESSAGE_QUEUE_H_