| // 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/basictypes.h> |
| |
| #include "buffet/commands/command_instance.h" |
| |
| namespace buffet { |
| |
| class CommandQueue final { |
| public: |
| CommandQueue() = default; |
| |
| // 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. The ID string of the added |
| // command is returned by this method. |
| std::string Add(std::unique_ptr<const 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<const 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. |
| const CommandInstance* Find(const std::string& id) const; |
| |
| private: |
| // ID-to-CommandInstance map. |
| std::map<std::string, std::unique_ptr<const CommandInstance>> map_; |
| // Counter for generating unique command IDs. |
| int next_id_ = 0; |
| |
| DISALLOW_COPY_AND_ASSIGN(CommandQueue); |
| }; |
| |
| } // namespace buffet |
| |
| #endif // BUFFET_COMMANDS_COMMAND_QUEUE_H_ |