Home | History | Annotate | Download | only in system
      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.
      4 
      5 #ifndef MOJO_SYSTEM_MESSAGE_QUEUE_H_
      6 #define MOJO_SYSTEM_MESSAGE_QUEUE_H_
      7 
      8 #include <deque>
      9 
     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"
     14 
     15 namespace mojo {
     16 namespace system {
     17 
     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 {
     22  public:
     23   MessageInTransitQueue();
     24   ~MessageInTransitQueue();
     25 
     26   bool IsEmpty() const { return queue_.empty(); }
     27 
     28   void AddMessage(scoped_ptr<MessageInTransit> message) {
     29     queue_.push_back(message.release());
     30   }
     31 
     32   scoped_ptr<MessageInTransit> GetMessage() {
     33     MessageInTransit* rv = queue_.front();
     34     queue_.pop_front();
     35     return make_scoped_ptr(rv);
     36   }
     37 
     38   MessageInTransit* PeekMessage() { return queue_.front(); }
     39 
     40   void DiscardMessage() {
     41     delete queue_.front();
     42     queue_.pop_front();
     43   }
     44 
     45   void Clear();
     46 
     47   // Efficiently swaps contents with |*other|.
     48   void Swap(MessageInTransitQueue* other);
     49 
     50  private:
     51   // TODO(vtl): When C++11 is available, switch this to a deque of
     52   // |scoped_ptr|/|unique_ptr|s.
     53   std::deque<MessageInTransit*> queue_;
     54 
     55   DISALLOW_COPY_AND_ASSIGN(MessageInTransitQueue);
     56 };
     57 
     58 }  // namespace system
     59 }  // namespace mojo
     60 
     61 #endif  // MOJO_SYSTEM_MESSAGE_QUEUE_H_
     62