From fca90c64acb54f74188fa2b8ad96207cf5833ff1 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Sun, 8 Sep 2024 15:37:11 +0200 Subject: [PATCH] Create FlagHolder --- src/openrct2/core/FlagHolder.hpp | 45 ++++++++++++++++++++++++++++++++ src/openrct2/libopenrct2.vcxproj | 1 + 2 files changed, 46 insertions(+) create mode 100644 src/openrct2/core/FlagHolder.hpp diff --git a/src/openrct2/core/FlagHolder.hpp b/src/openrct2/core/FlagHolder.hpp new file mode 100644 index 0000000000..f235286fea --- /dev/null +++ b/src/openrct2/core/FlagHolder.hpp @@ -0,0 +1,45 @@ +/***************************************************************************** + * Copyright (c) 2014-2024 OpenRCT2 developers + * + * For a complete list of all authors, please refer to contributors.md + * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 + * + * OpenRCT2 is licensed under the GNU General Public License version 3. + *****************************************************************************/ + +#pragma once + +template struct FlagHolder +{ + THolderType holder{}; + + constexpr void clearAll() + { + holder = 0; + } + + [[nodiscard]] constexpr bool isEmpty() const + { + return holder == 0; + } + + [[nodiscard]] constexpr bool has(TEnumType flag) const + { + return (holder & EnumToFlag(flag)) != 0; + } + + constexpr void set(TEnumType flag) + { + holder |= EnumToFlag(flag); + } + + constexpr void unset(TEnumType flag) + { + holder &= ~EnumToFlag(flag); + } + + constexpr void flip(TEnumType flag) + { + holder ^= EnumToFlag(flag); + } +}; diff --git a/src/openrct2/libopenrct2.vcxproj b/src/openrct2/libopenrct2.vcxproj index 7e8bbab311..ea19a39343 100644 --- a/src/openrct2/libopenrct2.vcxproj +++ b/src/openrct2/libopenrct2.vcxproj @@ -222,6 +222,7 @@ +