| // Copyright 2014 The Chromium OS Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #ifndef BUFFET_COMMANDS_COMMAND_QUEUE_H_ | 
 | #define BUFFET_COMMANDS_COMMAND_QUEUE_H_ | 
 |  | 
 | #include <map> | 
 | #include <memory> | 
 | #include <string> | 
 |  | 
 | #include <base/macros.h> | 
 |  | 
 | #include "buffet/commands/command_instance.h" | 
 |  | 
 | namespace buffet { | 
 |  | 
 | class CommandDispachInterface; | 
 |  | 
 | class CommandQueue final { | 
 |  public: | 
 |   CommandQueue() = default; | 
 |  | 
 |   // Sets a command dispatch notifications for changes in command queue. | 
 |   // |dispatch_interface| must outlive the CommandQueue object instance | 
 |   // or be nullptr. | 
 |   void SetCommandDispachInterface(CommandDispachInterface* dispatch_interface) { | 
 |     dispatch_interface_ = dispatch_interface; | 
 |   } | 
 |  | 
 |   // Checks if the command queue is empty. | 
 |   bool IsEmpty() const { return map_.empty(); } | 
 |  | 
 |   // Returns the number of commands in the queue. | 
 |   size_t GetCount() const { return map_.size(); } | 
 |  | 
 |   // Adds a new command to the queue. Each command in the queue has a unique | 
 |   // ID that identifies that command instance in this queue. This identifier | 
 |   // has no relation to any GCD command identifiers or anything else. Just a | 
 |   // unique key in this queue class. | 
 |   // The ID string of the added command is returned by this method. | 
 |   std::string Add(std::unique_ptr<CommandInstance> instance); | 
 |  | 
 |   // Removes a command identified by |id| from the queue. Returns a unique | 
 |   // pointer to the command instance if removed successfully, or an empty | 
 |   // unique_ptr if the command with the given ID doesn't exist in the queue. | 
 |   std::unique_ptr<CommandInstance> Remove(const std::string& id); | 
 |  | 
 |   // Finds a command instance in the queue by the instance |id|. Returns | 
 |   // nullptr if the command with the given |id| is not found. The returned | 
 |   // pointer should not be persisted for a long period of time. | 
 |   CommandInstance* Find(const std::string& id) const; | 
 |  | 
 |  private: | 
 |   // ID-to-CommandInstance map. | 
 |   std::map<std::string, std::unique_ptr<CommandInstance>> map_; | 
 |   // Counter for generating unique command IDs. | 
 |   int next_id_ = 0; | 
 |   // Callback interface for command dispatch, if provided. | 
 |   CommandDispachInterface* dispatch_interface_ = nullptr; | 
 |  | 
 |   DISALLOW_COPY_AND_ASSIGN(CommandQueue); | 
 | }; | 
 |  | 
 | }  // namespace buffet | 
 |  | 
 | #endif  // BUFFET_COMMANDS_COMMAND_QUEUE_H_ |