Files
2026-08-19 09:00:28 +08:00

41 lines
1.4 KiB
C++

#pragma once
#include <array>
#include <limits>
namespace flog
{
typedef uint32_t LogMessageFlag;
typedef LogMessageFlag MessageFlag;
typedef class LogMessageFlagManager
{
public:
static constexpr MessageFlag ADD_FAILED = 0;
static constexpr size_t FLAG_ARRAY_SIZE = std::numeric_limits<MessageFlag>::digits;
LogMessageFlagManager() noexcept = default;
~LogMessageFlagManager() = default;
LogMessageFlagManager(const LogMessageFlagManager&) noexcept = default;
LogMessageFlagManager& operator=(const LogMessageFlagManager&) noexcept = default;
LogMessageFlagManager(LogMessageFlagManager&&) noexcept = default;
LogMessageFlagManager& operator=(LogMessageFlagManager&&) noexcept = default;
NODISCARD bool isFull() const noexcept { return flagCount >= FLAG_ARRAY_SIZE; }
NODISCARD bool pushable() const noexcept { return !isFull(); }
NODISCARD bool isEmpty() const noexcept { return flagCount == 0; }
NODISCARD bool empty() const noexcept { return isEmpty(); }
NODISCARD bool contains(std::string_view name) const noexcept;
NODISCARD MessageFlag addFlag (std::string_view name);
NODISCARD MessageFlag findFlag(std::string_view name) const;
private:
std::array<std::string, FLAG_ARRAY_SIZE> m_flagMap{};
size_t flagCount { 0 };
} MessageFlagManager;
}