summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/ioport.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/ioport.h')
-rw-r--r--src/emu/ioport.h148
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