const correctness related changes to softlist

This commit is contained in:
Nathan Woods 2016-07-19 20:39:55 -04:00
parent 8d9fb8e4a9
commit 12369fe758
11 changed files with 37 additions and 37 deletions

View File

@ -850,7 +850,7 @@ bool device_image_interface::load_software(software_list_device &swlist, const c
UINT32 crc = 0; UINT32 crc = 0;
bool has_crc = hash_collection(ROM_GETHASHDATA(romp)).crc(crc); bool has_crc = hash_collection(ROM_GETHASHDATA(romp)).crc(crc);
software_info *swinfo = swlist.find(swname); const software_info *swinfo = swlist.find(swname);
if (swinfo == nullptr) if (swinfo == nullptr)
return false; return false;
@ -1281,7 +1281,7 @@ void device_image_interface::software_name_split(const char *swlist_swname, std:
} }
software_part *device_image_interface::find_software_item(const char *path, bool restrict_to_interface) const const software_part *device_image_interface::find_software_item(const char *path, bool restrict_to_interface) const
{ {
// split full software name into software list name and short software name // split full software name into software list name and short software name
std::string swlist_name, swinfo_name, swpart_name; std::string swlist_name, swinfo_name, swpart_name;
@ -1297,10 +1297,10 @@ software_part *device_image_interface::find_software_item(const char *path, bool
{ {
if (swlist_name.compare(swlistdev.list_name())==0 || !(swlist_name.length() > 0)) if (swlist_name.compare(swlistdev.list_name())==0 || !(swlist_name.length() > 0))
{ {
software_info *info = swlistdev.find(swinfo_name.c_str()); const software_info *info = swlistdev.find(swinfo_name.c_str());
if (info != nullptr) if (info != nullptr)
{ {
software_part *part = info->find_part(swpart_name.c_str(), interface); const software_part *part = info->find_part(swpart_name.c_str(), interface);
if (part != nullptr) if (part != nullptr)
return part; return part;
} }
@ -1312,10 +1312,10 @@ software_part *device_image_interface::find_software_item(const char *path, bool
// gameboy:sml) which is not handled properly by software_name_split // gameboy:sml) which is not handled properly by software_name_split
// since the function cannot distinguish between this and the case // since the function cannot distinguish between this and the case
// path = swinfo_name:swpart_name // path = swinfo_name:swpart_name
software_info *info = swlistdev.find(swpart_name.c_str()); const software_info *info = swlistdev.find(swpart_name.c_str());
if (info != nullptr) if (info != nullptr)
{ {
software_part *part = info->find_part(nullptr, interface); const software_part *part = info->find_part(nullptr, interface);
if (part != nullptr) if (part != nullptr)
return part; return part;
} }
@ -1340,7 +1340,7 @@ software_part *device_image_interface::find_software_item(const char *path, bool
// sw_info and sw_part are also set. // sw_info and sw_part are also set.
//------------------------------------------------- //-------------------------------------------------
bool device_image_interface::load_software_part(const char *path, software_part *&swpart) bool device_image_interface::load_software_part(const char *path, const software_part *&swpart)
{ {
// if no match has been found, we suggest similar shortnames // if no match has been found, we suggest similar shortnames
swpart = find_software_item(path, true); swpart = find_software_item(path, true);
@ -1376,7 +1376,7 @@ bool device_image_interface::load_software_part(const char *path, software_part
const char *requirement = swpart->feature("requirement"); const char *requirement = swpart->feature("requirement");
if (requirement != nullptr) if (requirement != nullptr)
{ {
software_part *req_swpart = find_software_item(requirement, false); const software_part *req_swpart = find_software_item(requirement, false);
if (req_swpart != nullptr) if (req_swpart != nullptr)
{ {
device_image_interface *req_image = req_swpart->find_mountable_image(device().mconfig()); device_image_interface *req_image = req_swpart->find_mountable_image(device().mconfig());
@ -1401,7 +1401,7 @@ std::string device_image_interface::software_get_default_slot(const char *defaul
if (*path != '\0') if (*path != '\0')
{ {
result.assign(default_card_slot); result.assign(default_card_slot);
software_part *swpart = find_software_item(path, true); const software_part *swpart = find_software_item(path, true);
if (swpart != nullptr) if (swpart != nullptr)
{ {
const char *slot = swpart->feature("slot"); const char *slot = swpart->feature("slot");

View File

@ -266,8 +266,8 @@ protected:
void image_checkhash(); void image_checkhash();
void update_names(const device_type device_type = nullptr, const char *inst = nullptr, const char *brief = nullptr); void update_names(const device_type device_type = nullptr, const char *inst = nullptr, const char *brief = nullptr);
software_part *find_software_item(const char *path, bool restrict_to_interface) const; const software_part *find_software_item(const char *path, bool restrict_to_interface) const;
bool load_software_part(const char *path, software_part *&swpart); bool load_software_part(const char *path, const software_part *&swpart);
std::string software_get_default_slot(const char *default_card_slot) const; std::string software_get_default_slot(const char *default_card_slot) const;
// derived class overrides // derived class overrides
@ -293,8 +293,8 @@ protected:
/* Software information */ /* Software information */
std::string m_full_software_name; std::string m_full_software_name;
software_info *m_software_info_ptr; const software_info *m_software_info_ptr;
software_part *m_software_part_ptr; const software_part *m_software_part_ptr;
std::string m_software_list_name; std::string m_software_list_name;
/* info read from the hash file/software list */ /* info read from the hash file/software list */

View File

@ -1275,7 +1275,7 @@ void rom_load_manager::load_software_part_region(device_t &device, software_list
m_romstotalsize = 0; m_romstotalsize = 0;
m_romsloadedsize = 0; m_romsloadedsize = 0;
software_info *swinfo = swlist.find(swname); const software_info *swinfo = swlist.find(swname);
if (swinfo != nullptr) if (swinfo != nullptr)
{ {
UINT32 supported = swinfo->supported(); UINT32 supported = swinfo->supported();

View File

@ -269,7 +269,7 @@ software_info::software_info(software_list_device &list, const char *name, const
// optional interface match // optional interface match
//------------------------------------------------- //-------------------------------------------------
software_part *software_info::find_part(const char *partname, const char *interface) const software_part *software_info::find_part(const char *partname, const char *interface) const
{ {
// if neither partname nor interface supplied, then we just return the first entry // if neither partname nor interface supplied, then we just return the first entry
if (partname != nullptr && strlen(partname)==0) partname = nullptr; if (partname != nullptr && strlen(partname)==0) partname = nullptr;
@ -278,7 +278,7 @@ software_part *software_info::find_part(const char *partname, const char *interf
return m_partdata.first(); return m_partdata.first();
// look for the part by name and match against the interface if provided // look for the part by name and match against the interface if provided
for (software_part &part : m_partdata) for (const software_part &part : m_partdata)
if (partname != nullptr && strcmp(partname, part.name()) == 0) if (partname != nullptr && strcmp(partname, part.name()) == 0)
{ {
if (interface == nullptr || part.matches_interface(interface)) if (interface == nullptr || part.matches_interface(interface))
@ -369,7 +369,7 @@ void software_list_device::device_start()
// and optional interface // and optional interface
//------------------------------------------------- //-------------------------------------------------
void software_list_device::find_approx_matches(const char *name, int matches, software_info **list, const char *interface) void software_list_device::find_approx_matches(const char *name, int matches, const software_info **list, const char *interface)
{ {
// if no name, return // if no name, return
if (name == nullptr || name[0] == 0) if (name == nullptr || name[0] == 0)
@ -384,9 +384,9 @@ void software_list_device::find_approx_matches(const char *name, int matches, so
} }
// iterate over our info (will cause a parse if needed) // iterate over our info (will cause a parse if needed)
for (software_info &swinfo : get_info()) for (const software_info &swinfo : get_info())
{ {
software_part *part = swinfo.first_part(); const software_part *part = swinfo.first_part();
if ((interface == nullptr || part->matches_interface(interface)) && part->is_compatible(*this) == SOFTWARE_IS_COMPATIBLE) if ((interface == nullptr || part->matches_interface(interface)) && part->is_compatible(*this) == SOFTWARE_IS_COMPATIBLE)
{ {
// pick the best match between driver name and description // pick the best match between driver name and description
@ -463,7 +463,7 @@ void software_list_device::display_matches(const machine_config &config, const c
for (software_list_device &swlistdev : deviter) for (software_list_device &swlistdev : deviter)
{ {
// get the top 16 approximate matches for the selected device interface (i.e. only carts for cartslot, etc.) // get the top 16 approximate matches for the selected device interface (i.e. only carts for cartslot, etc.)
software_info *matches[16] = { nullptr }; const software_info *matches[16] = { nullptr };
swlistdev.find_approx_matches(name, ARRAY_LENGTH(matches), matches, interface); swlistdev.find_approx_matches(name, ARRAY_LENGTH(matches), matches, interface);
// if we found some, print them // if we found some, print them
@ -492,7 +492,7 @@ void software_list_device::display_matches(const machine_config &config, const c
// from an intermediate point // from an intermediate point
//------------------------------------------------- //-------------------------------------------------
software_info *software_list_device::find(const char *look_for, software_info *prev) const software_info *software_list_device::find(const char *look_for, const software_info *prev)
{ {
// nullptr search returns nothing // nullptr search returns nothing
if (look_for == nullptr) if (look_for == nullptr)
@ -636,7 +636,7 @@ void software_list_device::internal_validity_check(validity_checker &valid)
} }
// make sure the parent exists // make sure the parent exists
software_info *swinfo2 = find(swinfo.parentname()); const software_info *swinfo2 = find(swinfo.parentname());
if (swinfo2 == nullptr) if (swinfo2 == nullptr)
osd_printf_error("%s: parent '%s' software for '%s' not found\n", filename(), swinfo.parentname(), swinfo.shortname()); osd_printf_error("%s: parent '%s' software for '%s' not found\n", filename(), swinfo.parentname(), swinfo.shortname());

View File

@ -118,7 +118,7 @@ public:
const char *name() const { return m_name; } const char *name() const { return m_name; }
const char *interface() const { return m_interface; } const char *interface() const { return m_interface; }
const simple_list<feature_list_item> &featurelist() const { return m_featurelist; } const simple_list<feature_list_item> &featurelist() const { return m_featurelist; }
rom_entry *romdata(unsigned int index = 0) { return (index < m_romdata.size()) ? &m_romdata[index] : nullptr; } const rom_entry *romdata(unsigned int index = 0) const { return (index < m_romdata.size()) ? &m_romdata[index] : nullptr; }
// helpers // helpers
software_compatibility is_compatible(const software_list_device &swlist) const; software_compatibility is_compatible(const software_list_device &swlist) const;
@ -161,10 +161,10 @@ public:
const simple_list<feature_list_item> &shared_info() const { return m_shared_info; } const simple_list<feature_list_item> &shared_info() const { return m_shared_info; }
UINT32 supported() const { return m_supported; } UINT32 supported() const { return m_supported; }
const simple_list<software_part> &parts() const { return m_partdata; } const simple_list<software_part> &parts() const { return m_partdata; }
software_part *first_part() const { return m_partdata.first(); } const software_part *first_part() const { return m_partdata.first(); }
// additional operations // additional operations
software_part *find_part(const char *partname, const char *interface = nullptr); const software_part *find_part(const char *partname, const char *interface = nullptr) const;
bool has_multiple_parts(const char *interface) const; bool has_multiple_parts(const char *interface) const;
private: private:
@ -212,8 +212,8 @@ public:
const simple_list<software_info> &get_info() { if (!m_parsed) parse(); return m_infolist; } const simple_list<software_info> &get_info() { if (!m_parsed) parse(); return m_infolist; }
// operations // operations
software_info *find(const char *look_for, software_info *prev = nullptr); const software_info *find(const char *look_for, const software_info *prev = nullptr);
void find_approx_matches(const char *name, int matches, software_info **list, const char *interface); void find_approx_matches(const char *name, int matches, const software_info **list, const char *interface);
void release(); void release();
// string pool helpers // string pool helpers

View File

@ -149,7 +149,7 @@ media_auditor::summary media_auditor::audit_device(device_t &device, const char
//------------------------------------------------- //-------------------------------------------------
// audit_software // audit_software
//------------------------------------------------- //-------------------------------------------------
media_auditor::summary media_auditor::audit_software(const char *list_name, software_info *swinfo, const char *validation) media_auditor::summary media_auditor::audit_software(const char *list_name, const software_info *swinfo, const char *validation)
{ {
// start fresh // start fresh
m_record_list.clear(); m_record_list.clear();

View File

@ -158,7 +158,7 @@ public:
// audit operations // audit operations
summary audit_media(const char *validation = AUDIT_VALIDATE_FULL); summary audit_media(const char *validation = AUDIT_VALIDATE_FULL);
summary audit_device(device_t &device, const char *validation = AUDIT_VALIDATE_FULL); summary audit_device(device_t &device, const char *validation = AUDIT_VALIDATE_FULL);
summary audit_software(const char *list_name, software_info *swinfo, const char *validation = AUDIT_VALIDATE_FULL); summary audit_software(const char *list_name, const software_info *swinfo, const char *validation = AUDIT_VALIDATE_FULL);
summary audit_samples(); summary audit_samples();
summary summarize(const char *name, std::ostream *output = nullptr) const; summary summarize(const char *name, std::ostream *output = nullptr) const;

View File

@ -520,7 +520,7 @@ int cli_frontend::execute(int argc, char **argv)
bool compatible = false; bool compatible = false;
for (software_list_device &swlistdev : iter) for (software_list_device &swlistdev : iter)
{ {
software_info *swinfo = swlistdev.find(m_options.software_name()); const software_info *swinfo = swlistdev.find(m_options.software_name());
if (swinfo != nullptr) if (swinfo != nullptr)
{ {
// loop through all parts // loop through all parts

View File

@ -376,8 +376,8 @@ void mame_options::set_system_name(emu_options &options, const char *name)
// look up the software part // look up the software part
machine_config config(*cursystem, options); machine_config config(*cursystem, options);
software_list_device *swlist = software_list_device::find_by_name(config, sw_list.c_str()); software_list_device *swlist = software_list_device::find_by_name(config, sw_list.c_str());
software_info *swinfo = swlist != nullptr ? swlist->find(sw_name.c_str()) : nullptr; const software_info *swinfo = swlist != nullptr ? swlist->find(sw_name.c_str()) : nullptr;
software_part *swpart = swinfo != nullptr ? swinfo->find_part(sw_part.c_str()) : nullptr; const software_part *swpart = swinfo != nullptr ? swinfo->find_part(sw_part.c_str()) : nullptr;
// then add the options // then add the options
if (new_system) if (new_system)

View File

@ -915,7 +915,7 @@ void menu_select_game::inkey_select_favorite(const event *menu_event)
media_auditor auditor(drv); media_auditor auditor(drv);
drv.next(); drv.next();
software_list_device *swlist = software_list_device::find_by_name(drv.config(), ui_swinfo->listname.c_str()); software_list_device *swlist = software_list_device::find_by_name(drv.config(), ui_swinfo->listname.c_str());
software_info *swinfo = swlist->find(ui_swinfo->shortname.c_str()); const software_info *swinfo = swlist->find(ui_swinfo->shortname.c_str());
media_auditor::summary summary = auditor.audit_software(swlist->list_name(), swinfo, AUDIT_VALIDATE_FAST); media_auditor::summary summary = auditor.audit_software(swlist->list_name(), swinfo, AUDIT_VALIDATE_FAST);

View File

@ -525,9 +525,9 @@ void menu_select_software::build_software_list()
{ {
m_filter.swlist.name.push_back(swlist.list_name()); m_filter.swlist.name.push_back(swlist.list_name());
m_filter.swlist.description.push_back(swlist.description()); m_filter.swlist.description.push_back(swlist.description());
for (software_info &swinfo : swlist.get_info()) for (const software_info &swinfo : swlist.get_info())
{ {
software_part *part = swinfo.first_part(); const software_part *part = swinfo.first_part();
if (part->is_compatible(swlist) == SOFTWARE_IS_COMPATIBLE) if (part->is_compatible(swlist) == SOFTWARE_IS_COMPATIBLE)
{ {
const char *instance_name = nullptr; const char *instance_name = nullptr;
@ -687,7 +687,7 @@ void menu_select_software::inkey_select(const event *menu_event)
media_auditor auditor(drivlist); media_auditor auditor(drivlist);
drivlist.next(); drivlist.next();
software_list_device *swlist = software_list_device::find_by_name(drivlist.config(), ui_swinfo->listname.c_str()); software_list_device *swlist = software_list_device::find_by_name(drivlist.config(), ui_swinfo->listname.c_str());
software_info *swinfo = swlist->find(ui_swinfo->shortname.c_str()); const software_info *swinfo = swlist->find(ui_swinfo->shortname.c_str());
media_auditor::summary summary = auditor.audit_software(swlist->list_name(), swinfo, AUDIT_VALIDATE_FAST); media_auditor::summary summary = auditor.audit_software(swlist->list_name(), swinfo, AUDIT_VALIDATE_FAST);
@ -1572,7 +1572,7 @@ void bios_selection::handle()
driver_enumerator drivlist(machine().options(), *ui_swinfo->driver); driver_enumerator drivlist(machine().options(), *ui_swinfo->driver);
drivlist.next(); drivlist.next();
software_list_device *swlist = software_list_device::find_by_name(drivlist.config(), ui_swinfo->listname.c_str()); software_list_device *swlist = software_list_device::find_by_name(drivlist.config(), ui_swinfo->listname.c_str());
software_info *swinfo = swlist->find(ui_swinfo->shortname.c_str()); const software_info *swinfo = swlist->find(ui_swinfo->shortname.c_str());
if (!ui().options().skip_parts_menu() && swinfo->has_multiple_parts(ui_swinfo->interface.c_str())) if (!ui().options().skip_parts_menu() && swinfo->has_multiple_parts(ui_swinfo->interface.c_str()))
{ {
s_parts parts; s_parts parts;