Skip to content

Instantly share code, notes, and snippets.

@kuujoo
Created August 9, 2022 19:25
Show Gist options
  • Select an option

  • Save kuujoo/c6d24270d660138d241b1e84a02c9e1f to your computer and use it in GitHub Desktop.

Select an option

Save kuujoo/c6d24270d660138d241b1e84a02c9e1f to your computer and use it in GitHub Desktop.
Use enum class for flags
// Usage:
// collision::Mask m = collision::Mask::JumpThrough | collision::Mask::Solid;
//
// if ( (m & collision::Mask::Solid) != 0)
// {
// ....
// }
//
namespace collision
{
enum class Mask : int
{
None = 0,
Solid = 1 << 0,
JumpThrough = 1 << 2
};
}
inline collision::Mask operator|(collision::Mask lhs, collision::Mask rhs)
{
return static_cast<collision::Mask>(static_cast<std::underlying_type<collision::Mask>::type>(lhs) | static_cast<std::underlying_type<collision::Mask>::type>(rhs));
}
inline collision::Mask operator&(collision::Mask lhs, collision::Mask rhs)
{
return static_cast<collision::Mask>(static_cast<std::underlying_type<collision::Mask>::type>(lhs) & static_cast<std::underlying_type<collision::Mask>::type>(rhs));
}
inline bool operator!=(collision::Mask lhs, std::underlying_type<collision::Mask>::type rhs)
{
return static_cast<std::underlying_type<collision::Mask>::type>(lhs) != rhs;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment