diff options
Diffstat (limited to 'include/cru/common')
-rw-r--r-- | include/cru/common/Bitmask.h | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/include/cru/common/Bitmask.h b/include/cru/common/Bitmask.h index bd6a8309..b1e8495e 100644 --- a/include/cru/common/Bitmask.h +++ b/include/cru/common/Bitmask.h @@ -1,6 +1,8 @@ #pragma once #include "Base.h" +#include <functional> + namespace cru { template <typename Tag, typename TUnderlying = unsigned> struct Bitmask final { @@ -35,8 +37,19 @@ struct Bitmask final { bool operator!=(Bitmask rhs) const { return this->value != rhs.value; } explicit operator TUnderlying() const { return value; } - operator bool() const { return value != 0; } + explicit operator bool() const { return value != 0; } TUnderlying value; }; } // namespace cru + +namespace std { +template <typename Tag, typename TUnderlying> +struct hash<cru::Bitmask<Tag, TUnderlying>> { + using Bitmask = cru::Bitmask<Tag, TUnderlying>; + + std::size_t operator()(Bitmask bitmask) const { + return std::hash<TUnderlying>{}(bitmask.value); + } +}; +} // namespace std |