diff options
| author | 2016-04-18 18:53:28 -0400 | |
|---|---|---|
| committer | 2016-04-18 18:53:28 -0400 | |
| commit | 084d3654ca14a79d9ec173bad4ddf00ad0fb5a7f (patch) | |
| tree | 197ae37b68f3169048fb3cadf6947353315f3608 /src/emu/mconfig.cpp | |
| parent | 55d3e544e013174880c8f208264683aac6d711f9 (diff) | |
Iterate over devices C++11 style
Replace the old device_iterator and its specialized versions with functionally equivalent classes that use standard operators to yield references to devices/interfaces rather than pointers. With range-based for loops, they no longer have to be stored in named variables, though they can also be reused concurrently since the iteration state is now maintained by a subclass.
Add a few more typical getters to device_t::subdevice_list.
Diffstat (limited to 'src/emu/mconfig.cpp')
| -rw-r--r-- | src/emu/mconfig.cpp | 27 |
1 files changed, 12 insertions, 15 deletions
diff --git a/src/emu/mconfig.cpp b/src/emu/mconfig.cpp index 2bf2eaab3d6..9cd039701cd 100644 --- a/src/emu/mconfig.cpp +++ b/src/emu/mconfig.cpp @@ -34,20 +34,20 @@ machine_config::machine_config(const game_driver &gamedrv, emu_options &options) bool is_selected_driver = core_stricmp(gamedrv.name,options.system_name())==0; // intialize slot devices - make sure that any required devices have been allocated - slot_interface_iterator slotiter(root_device()); - for (device_slot_interface *slot = slotiter.first(); slot != nullptr; slot = slotiter.next()) + + for (device_slot_interface &slot : slot_interface_iterator(root_device())) { - device_t &owner = slot->device(); + device_t &owner = slot.device(); std::string selval; bool isdefault = (options.priority(owner.tag()+1)==OPTION_PRIORITY_DEFAULT); if (is_selected_driver && options.exists(owner.tag()+1)) selval = options.main_value(owner.tag()+1); - else if (slot->default_option() != nullptr) - selval.assign(slot->default_option()); + else if (slot.default_option() != nullptr) + selval.assign(slot.default_option()); if (!selval.empty()) { - const device_slot_option *option = slot->option(selval.c_str()); + const device_slot_option *option = slot.option(selval.c_str()); if (option && (isdefault || option->selectable())) { @@ -74,10 +74,9 @@ machine_config::machine_config(const game_driver &gamedrv, emu_options &options) driver_device::static_set_game(*m_root_device, gamedrv); // then notify all devices that their configuration is complete - device_iterator iter(root_device()); - for (device_t *device = iter.first(); device != nullptr; device = iter.next()) - if (!device->configured()) - device->config_complete(); + for (device_t &device : device_iterator(root_device())) + if (!device.configured()) + device.config_complete(); } @@ -97,8 +96,7 @@ machine_config::~machine_config() screen_device *machine_config::first_screen() const { - screen_device_iterator iter(root_device()); - return iter.first(); + return screen_device_iterator(root_device()).first(); } @@ -235,9 +233,8 @@ device_t *machine_config::device_find(device_t *owner, const char *tag) void machine_config::remove_references(ATTR_UNUSED device_t &device) { // iterate over all devices and remove any references - device_iterator iter(root_device()); - for (device_t *scan = iter.first(); scan != nullptr; scan = iter.next()) - scan->subdevices().m_tagmap.clear(); //remove(&device); + for (device_t &scan : device_iterator(root_device())) + scan.subdevices().m_tagmap.clear(); //remove(&device); } |
