summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
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
commita11d1fe266af6f4212481c9e823bcde365ad0fae (patch)
tree21237cb3210d8f4e72e1db4d3208f6a3b9a2b035
parentae3fd3c0203ee952723380f308b201ec498ca984 (diff)
convenience macro for enum bitwise operators (nw)
-rw-r--r--src/devices/cpu/tlcs90/tlcs90.h2
-rw-r--r--src/emu/emucore.h14
-rw-r--r--src/emu/input.h4
-rw-r--r--src/emu/ioport.h6
-rw-r--r--src/emu/profiler.h2
-rw-r--r--src/emu/render.h2
-rw-r--r--src/frontend/mame/cheat.h2
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)