summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/mconfig.cpp
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2016-04-18 18:53:28 -0400
committer AJR <ajrhacker@users.noreply.github.com>2016-04-18 18:53:28 -0400
commit084d3654ca14a79d9ec173bad4ddf00ad0fb5a7f (patch)
tree197ae37b68f3169048fb3cadf6947353315f3608 /src/emu/mconfig.cpp
parent55d3e544e013174880c8f208264683aac6d711f9 (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.cpp27
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);
}