diff options
author | Vas Crabb <vas@vastheman.com> | 2017-07-22 14:32:29 +1000 |
---|---|---|
committer | Vas Crabb <vas@vastheman.com> | 2017-07-22 14:32:29 +1000 |
commit | a11d1fe266af6f4212481c9e823bcde365ad0fae (patch) | |
tree | 21237cb3210d8f4e72e1db4d3208f6a3b9a2b035 | |
parent | ae3fd3c0203ee952723380f308b201ec498ca984 (diff) |
convenience macro for enum bitwise operators (nw)
-rw-r--r-- | src/devices/cpu/tlcs90/tlcs90.h | 2 | ||||
-rw-r--r-- | src/emu/emucore.h | 14 | ||||
-rw-r--r-- | src/emu/input.h | 4 | ||||
-rw-r--r-- | src/emu/ioport.h | 6 | ||||
-rw-r--r-- | src/emu/profiler.h | 2 | ||||
-rw-r--r-- | src/emu/render.h | 2 | ||||
-rw-r--r-- | src/frontend/mame/cheat.h | 2 |
7 files changed, 20 insertions, 12 deletions
diff --git a/src/devices/cpu/tlcs90/tlcs90.h b/src/devices/cpu/tlcs90/tlcs90.h index 50c6c0998f9..6677ff7e628 100644 --- a/src/devices/cpu/tlcs90/tlcs90.h +++ b/src/devices/cpu/tlcs90/tlcs90.h @@ -76,7 +76,7 @@ enum e_ir }; enum tlcs90_e_irq { INTSWI = 0, INTNMI, INTWD, INT0, INTT0, INTT1, INTT2, INTT3, INTT4, INT1, INTT5, INT2, INTRX, INTTX, INTMAX }; -DECLARE_ENUM_OPERATORS(tlcs90_e_irq) +DECLARE_ENUM_INCDEC_OPERATORS(tlcs90_e_irq) class tlcs90_device : public cpu_device { diff --git a/src/emu/emucore.h b/src/emu/emucore.h index 4f1bc149275..51fca10e42b 100644 --- a/src/emu/emucore.h +++ b/src/emu/emucore.h @@ -188,13 +188,21 @@ const endianness_t ENDIANNESS_NATIVE = ENDIANNESS_BIG; TYPE(const TYPE &) = delete; \ TYPE &operator=(const TYPE &) = delete -// macro for declaring enumerator operators that increment/decrement like plain old C -#define DECLARE_ENUM_OPERATORS(TYPE) \ +// macro for declaring enumeration operators that increment/decrement like plain old C +#define DECLARE_ENUM_INCDEC_OPERATORS(TYPE) \ inline TYPE &operator++(TYPE &value) { return value = TYPE(std::underlying_type_t<TYPE>(value) + 1); } \ -inline TYPE operator++(TYPE &value, int) { TYPE const old(value); ++value; return old; } \ inline TYPE &operator--(TYPE &value) { return value = TYPE(std::underlying_type_t<TYPE>(value) - 1); } \ +inline TYPE operator++(TYPE &value, int) { TYPE const old(value); ++value; return old; } \ inline TYPE operator--(TYPE &value, int) { TYPE const old(value); --value; return old; } +// macro for declaring bitwise operators for an enumerated type +#define DECLARE_ENUM_BITWISE_OPERATORS(TYPE) \ +constexpr TYPE operator~(TYPE value) { return TYPE(~std::underlying_type_t<TYPE>(value)); } \ +constexpr TYPE operator&(TYPE a, TYPE b) { return TYPE(std::underlying_type_t<TYPE>(a) & std::underlying_type_t<TYPE>(b)); } \ +constexpr TYPE operator|(TYPE a, TYPE b) { return TYPE(std::underlying_type_t<TYPE>(a) | std::underlying_type_t<TYPE>(b)); } \ +inline TYPE &operator&=(TYPE &a, TYPE b) { return a = a & b; } \ +inline TYPE &operator|=(TYPE &a, TYPE b) { return a = a | b; } + // this macro passes an item followed by a string version of itself as two consecutive parameters #define NAME(x) x, #x diff --git a/src/emu/input.h b/src/emu/input.h index 78bf518e917..f3e061b37bd 100644 --- a/src/emu/input.h +++ b/src/emu/input.h @@ -51,7 +51,7 @@ enum input_device_class DEVICE_CLASS_INTERNAL, DEVICE_CLASS_MAXIMUM }; -DECLARE_ENUM_OPERATORS(input_device_class) +DECLARE_ENUM_INCDEC_OPERATORS(input_device_class) // device index @@ -338,7 +338,7 @@ enum input_item_id // absolute maximum ID ITEM_ID_ABSOLUTE_MAXIMUM = 0xfff }; -DECLARE_ENUM_OPERATORS(input_item_id) +DECLARE_ENUM_INCDEC_OPERATORS(input_item_id) diff --git a/src/emu/ioport.h b/src/emu/ioport.h index 7b434c55fdd..6816f431afe 100644 --- a/src/emu/ioport.h +++ b/src/emu/ioport.h @@ -54,7 +54,7 @@ enum input_seq_type SEQ_TYPE_DECREMENT, SEQ_TYPE_TOTAL }; -DECLARE_ENUM_OPERATORS(input_seq_type) +DECLARE_ENUM_INCDEC_OPERATORS(input_seq_type) // crosshair types @@ -402,7 +402,7 @@ enum ioport_type IPT_COUNT }; -DECLARE_ENUM_OPERATORS(ioport_type) +DECLARE_ENUM_INCDEC_OPERATORS(ioport_type) // aliases for some types #define IPT_PADDLE_H IPT_PADDLE #define IPT_PEDAL1 IPT_PEDAL @@ -874,7 +874,7 @@ private: u8 m_current4way; // current 4-way value u8 m_previous; // previous value }; -DECLARE_ENUM_OPERATORS(digital_joystick::direction_t) +DECLARE_ENUM_INCDEC_OPERATORS(digital_joystick::direction_t) // ======================> ioport_condition diff --git a/src/emu/profiler.h b/src/emu/profiler.h index 997c8c480e1..f3abc6b5688 100644 --- a/src/emu/profiler.h +++ b/src/emu/profiler.h @@ -71,7 +71,7 @@ enum profile_type PROFILER_IDLE, PROFILER_TOTAL }; -DECLARE_ENUM_OPERATORS(profile_type) +DECLARE_ENUM_INCDEC_OPERATORS(profile_type) diff --git a/src/emu/render.h b/src/emu/render.h index 61ff02dc0ff..ddb305ca5fa 100644 --- a/src/emu/render.h +++ b/src/emu/render.h @@ -614,7 +614,7 @@ enum item_layer ITEM_LAYER_MARQUEE, ITEM_LAYER_MAX }; -DECLARE_ENUM_OPERATORS(item_layer) +DECLARE_ENUM_INCDEC_OPERATORS(item_layer) diff --git a/src/frontend/mame/cheat.h b/src/frontend/mame/cheat.h index 93b7d1ebfb8..b685dba2c33 100644 --- a/src/frontend/mame/cheat.h +++ b/src/frontend/mame/cheat.h @@ -31,7 +31,7 @@ enum script_state SCRIPT_STATE_CHANGE, SCRIPT_STATE_COUNT }; -DECLARE_ENUM_OPERATORS(script_state) +DECLARE_ENUM_INCDEC_OPERATORS(script_state) |