1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-15 19:13:07 +01:00

Create FlagHolder

This commit is contained in:
Gymnasiast
2024-09-08 15:37:11 +02:00
parent 4b44f4f54d
commit fca90c64ac
2 changed files with 46 additions and 0 deletions

View File

@@ -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<typename THolderType, typename TEnumType> 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);
}
};

View File

@@ -222,6 +222,7 @@
<ClInclude Include="core\Range.hpp" />
<ClInclude Include="core\RTL.h" />
<ClInclude Include="core\FixedVector.h" />
<ClInclude Include="core\FlagHolder.hpp" />
<ClInclude Include="core\Speed.hpp" />
<ClInclude Include="core\String.hpp" />
<ClInclude Include="core\StringBuilder.h" />