| // Copyright 2017 The Fuchsia 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 PERIDOT_BIN_SESSIONMGR_MESSAGE_QUEUE_PERSISTENT_QUEUE_H_ |
| #define PERIDOT_BIN_SESSIONMGR_MESSAGE_QUEUE_PERSISTENT_QUEUE_H_ |
| |
| #include <deque> |
| #include <string> |
| |
| #include <lib/fxl/logging.h> |
| |
| namespace modular { |
| |
| /* Implements a FIFO queue of strings that is persisted to local storage as |
| * JSON. It is not safe to use from multiple processes or threads. If writing |
| * the queue JSON to disk fails an error will be logged but calls will not fail. |
| */ |
| class PersistentQueue { |
| public: |
| explicit PersistentQueue(std::string file_name); |
| bool IsEmpty() const { return queue_.empty(); } |
| |
| std::string Peek() const { |
| FXL_DCHECK(!queue_.empty()); |
| return queue_.front(); |
| } |
| |
| std::string Dequeue() { |
| std::string value = queue_.front(); |
| queue_.pop_front(); |
| Save(); |
| return value; |
| } |
| |
| void Enqueue(const std::string& value) { |
| queue_.push_back(value); |
| Save(); |
| } |
| |
| private: |
| std::string file_name_; |
| std::deque<std::string> queue_; |
| |
| void Save(); |
| }; |
| |
| } // namespace modular |
| |
| #endif // PERIDOT_BIN_SESSIONMGR_MESSAGE_QUEUE_PERSISTENT_QUEUE_H_ |