// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/blob/master/LICENSE.md #pragma once #include #include #include class StringCircularBuffer { public: explicit StringCircularBuffer(size_t size) : buffer(std::make_unique(size)), capacity(size) {} [[nodiscard]] size_t getCapacity() const noexcept { return capacity; } [[nodiscard]] bool isEmpty() const noexcept { return size == 0; } [[nodiscard]] virtual std::optional get(); [[nodiscard]] size_t getSize() const noexcept { return size; } [[nodiscard]] bool isFull() const noexcept { return full; } void put(const std::string &item); void put(std::string &&item); void reset(); private: void updateMembersAfterPut(); void updateMembersBeforePut(); std::unique_ptr buffer; bool full{false}; size_t head{0}; size_t capacity; size_t size{0}; size_t tail{0}; };