#pragma once #include #include 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::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 m_flagMap{}; size_t flagCount { 0 }; } MessageFlagManager; }