diff options
Diffstat (limited to 'src/emu/ioport.h')
-rw-r--r-- | src/emu/ioport.h | 148 |
1 files changed, 74 insertions, 74 deletions
diff --git a/src/emu/ioport.h b/src/emu/ioport.h index ef9f1b4ae13..9976c6e91b8 100644 --- a/src/emu/ioport.h +++ b/src/emu/ioport.h @@ -17,8 +17,10 @@ #ifndef MAME_EMU_IOPORT_H #define MAME_EMU_IOPORT_H +#include <array> #include <cstdint> #include <cstring> +#include <vector> #include <time.h> @@ -783,38 +785,36 @@ struct input_device_default // describes a fundamental input type, including default input sequences class input_type_entry { - friend class simple_list<input_type_entry>; - friend class ioport_manager; - public: // construction/destruction - input_type_entry(ioport_type type, ioport_group group, int player, const char *token, const char *name, input_seq standard); - input_type_entry(ioport_type type, ioport_group group, int player, const char *token, const char *name, input_seq standard, input_seq decrement, input_seq increment); + input_type_entry(ioport_type type, ioport_group group, int player, const char *token, const char *name, input_seq standard) noexcept; + input_type_entry(ioport_type type, ioport_group group, int player, const char *token, const char *name, input_seq standard, input_seq decrement, input_seq increment) noexcept; // getters - input_type_entry *next() const { return m_next; } - ioport_type type() const { return m_type; } - ioport_group group() const { return m_group; } - u8 player() const { return m_player; } - const char *token() const { return m_token; } - const char *name() const { return m_name; } - input_seq &defseq(input_seq_type seqtype = SEQ_TYPE_STANDARD) { return m_defseq[seqtype]; } - const input_seq &seq(input_seq_type seqtype = SEQ_TYPE_STANDARD) const { return m_seq[seqtype]; } - void restore_default_seq(); + ioport_type type() const noexcept { return m_type; } + ioport_group group() const noexcept { return m_group; } + u8 player() const noexcept { return m_player; } + const char *token() const noexcept { return m_token; } + const char *name() const noexcept { return m_name; } + input_seq &defseq(input_seq_type seqtype = SEQ_TYPE_STANDARD) noexcept { return m_defseq[seqtype]; } + const input_seq &defseq(input_seq_type seqtype = SEQ_TYPE_STANDARD) const noexcept { return m_defseq[seqtype]; } + const input_seq &seq(input_seq_type seqtype = SEQ_TYPE_STANDARD) const noexcept { return m_seq[seqtype]; } // setters - void configure_osd(const char *token, const char *name); + void restore_default_seq() noexcept; + void set_seq(input_seq_type seqtype, const input_seq &seq) noexcept { m_seq[seqtype] = seq; } + void replace_code(input_code oldcode, input_code newcode) noexcept; + void configure_osd(const char *token, const char *name) noexcept; private: // internal state - input_type_entry * m_next; // next description in the list ioport_type m_type; // IPT_* for this entry ioport_group m_group; // which group the port belongs to - u8 m_player; // player number (0 is player 1) + u8 m_player; // player number (0 is player 1) const char * m_token; // token used to store settings const char * m_name; // user-friendly name - input_seq m_defseq[SEQ_TYPE_TOTAL];// default input sequence - input_seq m_seq[SEQ_TYPE_TOTAL];// currently configured sequences + std::array<input_seq, SEQ_TYPE_TOTAL> m_defseq; // default input sequence + std::array<input_seq, SEQ_TYPE_TOTAL> m_seq; // currently configured sequences }; @@ -847,11 +847,11 @@ public: digital_joystick(int player, int number); // getters - digital_joystick *next() const { return m_next; } - int player() const { return m_player; } - int number() const { return m_number; } - u8 current() const { return m_current; } - u8 current4way() const { return m_current4way; } + digital_joystick *next() const noexcept { return m_next; } + int player() const noexcept { return m_player; } + int number() const noexcept { return m_number; } + u8 current() const noexcept { return m_current; } + u8 current4way() const noexcept { return m_current4way; } // configuration direction_t add_axis(ioport_field &field); @@ -1041,29 +1041,29 @@ public: bool analog_wraps() const { return ((m_flags & ANALOG_FLAG_WRAPS) != 0); } bool analog_invert() const { return ((m_flags & ANALOG_FLAG_INVERT) != 0); } - u8 impulse() const { return m_impulse; } + u8 impulse() const noexcept { return m_impulse; } const char *name() const; - const char *specific_name() const { return m_name; } - const input_seq &seq(input_seq_type seqtype = SEQ_TYPE_STANDARD) const; - const input_seq &defseq(input_seq_type seqtype = SEQ_TYPE_STANDARD) const; - const input_seq &defseq_unresolved(input_seq_type seqtype = SEQ_TYPE_STANDARD) const { return m_seq[seqtype]; } - void set_defseq(const input_seq &newseq) { set_defseq(SEQ_TYPE_STANDARD, newseq); } + const char *specific_name() const noexcept { return m_name; } + const input_seq &seq(input_seq_type seqtype = SEQ_TYPE_STANDARD) const noexcept; + const input_seq &defseq(input_seq_type seqtype = SEQ_TYPE_STANDARD) const noexcept; + const input_seq &defseq_unresolved(input_seq_type seqtype = SEQ_TYPE_STANDARD) const noexcept { return m_seq[seqtype]; } + void set_defseq(const input_seq &newseq) noexcept { set_defseq(SEQ_TYPE_STANDARD, newseq); } void set_defseq(input_seq_type seqtype, const input_seq &newseq); bool has_dynamic_read() const { return !m_read.isnull(); } bool has_dynamic_write() const { return !m_write.isnull(); } - ioport_value minval() const { return m_min; } - ioport_value maxval() const { return m_max; } - s32 sensitivity() const { return m_sensitivity; } - s32 delta() const { return m_delta; } - s32 centerdelta() const { return m_centerdelta; } - crosshair_axis_t crosshair_axis() const { return m_crosshair_axis; } - double crosshair_scale() const { return m_crosshair_scale; } - double crosshair_offset() const { return m_crosshair_offset; } - u16 full_turn_count() const { return m_full_turn_count; } - const ioport_value *remap_table() const { return m_remap_table; } - - u8 way() const { return m_way; } + ioport_value minval() const noexcept { return m_min; } + ioport_value maxval() const noexcept { return m_max; } + s32 sensitivity() const noexcept { return m_sensitivity; } + s32 delta() const noexcept { return m_delta; } + s32 centerdelta() const noexcept { return m_centerdelta; } + crosshair_axis_t crosshair_axis() const noexcept { return m_crosshair_axis; } + double crosshair_scale() const noexcept { return m_crosshair_scale; } + double crosshair_offset() const noexcept { return m_crosshair_offset; } + u16 full_turn_count() const noexcept { return m_full_turn_count; } + const ioport_value *remap_table() const noexcept { return m_remap_table; } + + u8 way() const noexcept { return m_way; } std::vector<char32_t> keyboard_codes(int which) const; std::string key_name(int which) const; ioport_field_live &live() const { assert(m_live != nullptr); return *m_live; } @@ -1074,9 +1074,9 @@ public: void set_player(u8 player) { m_player = player; } // derived getters - ioport_type_class type_class() const; - bool is_analog() const { return (m_type > IPT_ANALOG_FIRST && m_type < IPT_ANALOG_LAST); } - bool is_digital_joystick() const { return (m_type > IPT_DIGITAL_JOYSTICK_FIRST && m_type < IPT_DIGITAL_JOYSTICK_LAST); } + ioport_type_class type_class() const noexcept; + bool is_analog() const noexcept { return (m_type > IPT_ANALOG_FIRST && m_type < IPT_ANALOG_LAST); } + bool is_digital_joystick() const noexcept { return (m_type > IPT_DIGITAL_JOYSTICK_FIRST && m_type < IPT_DIGITAL_JOYSTICK_LAST); } // additional operations bool enabled() const { return m_condition.eval(); } @@ -1093,16 +1093,16 @@ public: // user-controllable settings for a field struct user_settings { - ioport_value value; // for DIP switches + ioport_value value = 0; // for DIP switches input_seq seq[SEQ_TYPE_TOTAL]; // sequences of all types - s32 sensitivity; // for analog controls - s32 delta; // for analog controls - s32 centerdelta; // for analog controls - bool reverse; // for analog controls - bool toggle; // for non-analog controls + s32 sensitivity = 0; // for analog controls + s32 delta = 0; // for analog controls + s32 centerdelta = 0; // for analog controls + bool reverse = false; // for analog controls + bool toggle = false; // for non-analog controls }; - void get_user_settings(user_settings &settings); - void set_user_settings(const user_settings &settings); + void get_user_settings(user_settings &settings) const noexcept; + void set_user_settings(const user_settings &settings) noexcept; private: void expand_diplocation(const char *location, std::string &errorbuf); @@ -1246,20 +1246,20 @@ class analog_field { friend class simple_list<analog_field>; friend class ioport_manager; - friend void ioport_field::set_user_settings(const ioport_field::user_settings &settings); + friend void ioport_field::set_user_settings(const ioport_field::user_settings &settings) noexcept; public: // construction/destruction analog_field(ioport_field &field); // getters - analog_field *next() const { return m_next; } - ioport_manager &manager() const { return m_field.manager(); } - ioport_field &field() const { return m_field; } - s32 sensitivity() const { return m_sensitivity; } - bool reverse() const { return m_reverse; } - s32 delta() const { return m_delta; } - s32 centerdelta() const { return m_centerdelta; } + analog_field *next() const noexcept { return m_next; } + ioport_manager &manager() const noexcept { return m_field.manager(); } + ioport_field &field() const noexcept { return m_field; } + s32 sensitivity() const noexcept { return m_sensitivity; } + bool reverse() const noexcept { return m_reverse; } + s32 delta() const noexcept { return m_delta; } + s32 centerdelta() const noexcept { return m_centerdelta; } // readers void read(ioport_value &value); @@ -1379,24 +1379,24 @@ public: ~ioport_manager(); // getters - running_machine &machine() const { return m_machine; } - const ioport_list &ports() const { return m_portlist; } - bool safe_to_read() const { return m_safe_to_read; } - natural_keyboard &natkeyboard() { assert(m_natkeyboard != nullptr); return *m_natkeyboard; } + running_machine &machine() const noexcept { return m_machine; } + const ioport_list &ports() const noexcept { return m_portlist; } + bool safe_to_read() const noexcept { return m_safe_to_read; } + natural_keyboard &natkeyboard() noexcept { assert(m_natkeyboard != nullptr); return *m_natkeyboard; } // type helpers - const simple_list<input_type_entry> &types() const { return m_typelist; } + const std::vector<input_type_entry> &types() const noexcept { return m_typelist; } bool type_pressed(ioport_type type, int player = 0); - const char *type_name(ioport_type type, u8 player); - ioport_group type_group(ioport_type type, int player); - const input_seq &type_seq(ioport_type type, int player = 0, input_seq_type seqtype = SEQ_TYPE_STANDARD); - void set_type_seq(ioport_type type, int player, input_seq_type seqtype, const input_seq &newseq); - static bool type_is_analog(ioport_type type) { return (type > IPT_ANALOG_FIRST && type < IPT_ANALOG_LAST); } - bool type_class_present(ioport_type_class inputclass); + const char *type_name(ioport_type type, u8 player) const noexcept; + ioport_group type_group(ioport_type type, int player) const noexcept; + const input_seq &type_seq(ioport_type type, int player = 0, input_seq_type seqtype = SEQ_TYPE_STANDARD) const noexcept; + void set_type_seq(ioport_type type, int player, input_seq_type seqtype, const input_seq &newseq) noexcept; + static constexpr bool type_is_analog(ioport_type type) noexcept { return (type > IPT_ANALOG_FIRST && type < IPT_ANALOG_LAST); } + bool type_class_present(ioport_type_class inputclass) const noexcept; // other helpers digital_joystick &digjoystick(int player, int joysticknum); - int count_players() const; + int count_players() const noexcept; bool crosshair_position(int player, float &x, float &y); s32 frame_interpolate(s32 oldval, s32 newval); ioport_type token_to_input_type(const char *string, int &player) const; @@ -1448,7 +1448,7 @@ private: ioport_list m_portlist; // list of input port configurations // types - simple_list<input_type_entry> m_typelist; // list of live type states + std::vector<input_type_entry> m_typelist; // list of live type states input_type_entry * m_type_to_entry[IPT_COUNT][MAX_PLAYERS]; // map from type/player to type state // specific special global input states |