Skip to content

Instantly share code, notes, and snippets.

@superwills
Created April 27, 2024 04:46
Show Gist options
  • Save superwills/728a0a93f4b1c47c559aa67beeef653f to your computer and use it in GitHub Desktop.
Save superwills/728a0a93f4b1c47c559aa67beeef653f to your computer and use it in GitHub Desktop.
Enum increment operators
enum class MouseButton {
Left,
Middle,
Right,
NUM_BUTTONS
};
map< MouseButton, string > mouseButtonName = {
{ MouseButton::Left, "Left" },
{ MouseButton::Middle, "Middle" },
{ MouseButton::Right, "Right" },
};
// Preincrement
inline MouseButton operator++( MouseButton& mouseButton ) {
mouseButton = (MouseButton)((int)mouseButton + 1);
return mouseButton;
}
// Postincrement
inline MouseButton operator++( MouseButton& mouseButton, int postIncrement ) {
MouseButton oldValue = mouseButton;
mouseButton = (MouseButton)((int)mouseButton + 1);
return oldValue;
}
int main() {
for( MouseButton mb = MouseButton::Left; mb < MouseButton::NUM_BUTTONS; mb++ ) {
puts( mouseButtonName[ mb ].c_str() );
}
}
@superwills
Copy link
Author

To define bitwise ops (probably don't want to define pre/postincrement + bitwise on the same enum class

inline MouseButton operator|( MouseButton a, MouseButton b ) {
  return (MouseButton)( (int&)a | (int&)b );
}
inline MouseButton operator&( MouseButton a, MouseButton b ) {
  return (MouseButton)( (int&)a & (int&)b );
}
inline MouseButton operator|=( MouseButton& a, MouseButton b ) {
  (int&)a |= (int&)b;
  return a;
}
inline MouseButton operator&=( MouseButton& a, MouseButton b ) {
  (int&)a &= (int&)b;
  return a;
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment