mirror of
https://github.com/holub/mame
synced 2025-04-28 11:11:48 +03:00
const correctness related changes to softlist
This commit is contained in:
parent
8d9fb8e4a9
commit
12369fe758
@ -850,7 +850,7 @@ bool device_image_interface::load_software(software_list_device &swlist, const c
|
||||
UINT32 crc = 0;
|
||||
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)
|
||||
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
|
||||
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))
|
||||
{
|
||||
software_info *info = swlistdev.find(swinfo_name.c_str());
|
||||
const software_info *info = swlistdev.find(swinfo_name.c_str());
|
||||
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)
|
||||
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
|
||||
// since the function cannot distinguish between this and the case
|
||||
// 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)
|
||||
{
|
||||
software_part *part = info->find_part(nullptr, interface);
|
||||
const software_part *part = info->find_part(nullptr, interface);
|
||||
if (part != nullptr)
|
||||
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.
|
||||
//-------------------------------------------------
|
||||
|
||||
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
|
||||
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");
|
||||
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)
|
||||
{
|
||||
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')
|
||||
{
|
||||
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)
|
||||
{
|
||||
const char *slot = swpart->feature("slot");
|
||||
|
@ -266,8 +266,8 @@ protected:
|
||||
void image_checkhash();
|
||||
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;
|
||||
bool load_software_part(const char *path, software_part *&swpart);
|
||||
const software_part *find_software_item(const char *path, bool restrict_to_interface) const;
|
||||
bool load_software_part(const char *path, const software_part *&swpart);
|
||||
std::string software_get_default_slot(const char *default_card_slot) const;
|
||||
|
||||
// derived class overrides
|
||||
@ -293,8 +293,8 @@ protected:
|
||||
|
||||
/* Software information */
|
||||
std::string m_full_software_name;
|
||||
software_info *m_software_info_ptr;
|
||||
software_part *m_software_part_ptr;
|
||||
const software_info *m_software_info_ptr;
|
||||
const software_part *m_software_part_ptr;
|
||||
std::string m_software_list_name;
|
||||
|
||||
/* info read from the hash file/software list */
|
||||
|
@ -1275,7 +1275,7 @@ void rom_load_manager::load_software_part_region(device_t &device, software_list
|
||||
m_romstotalsize = 0;
|
||||
m_romsloadedsize = 0;
|
||||
|
||||
software_info *swinfo = swlist.find(swname);
|
||||
const software_info *swinfo = swlist.find(swname);
|
||||
if (swinfo != nullptr)
|
||||
{
|
||||
UINT32 supported = swinfo->supported();
|
||||
|
@ -269,7 +269,7 @@ software_info::software_info(software_list_device &list, const char *name, const
|
||||
// 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 (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();
|
||||
|
||||
// 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 (interface == nullptr || part.matches_interface(interface))
|
||||
@ -369,7 +369,7 @@ void software_list_device::device_start()
|
||||
// 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 (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)
|
||||
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)
|
||||
{
|
||||
// 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)
|
||||
{
|
||||
// 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);
|
||||
|
||||
// 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
|
||||
//-------------------------------------------------
|
||||
|
||||
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
|
||||
if (look_for == nullptr)
|
||||
@ -636,7 +636,7 @@ void software_list_device::internal_validity_check(validity_checker &valid)
|
||||
}
|
||||
|
||||
// make sure the parent exists
|
||||
software_info *swinfo2 = find(swinfo.parentname());
|
||||
const software_info *swinfo2 = find(swinfo.parentname());
|
||||
|
||||
if (swinfo2 == nullptr)
|
||||
osd_printf_error("%s: parent '%s' software for '%s' not found\n", filename(), swinfo.parentname(), swinfo.shortname());
|
||||
|
@ -118,7 +118,7 @@ public:
|
||||
const char *name() const { return m_name; }
|
||||
const char *interface() const { return m_interface; }
|
||||
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
|
||||
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; }
|
||||
UINT32 supported() const { return m_supported; }
|
||||
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
|
||||
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;
|
||||
|
||||
private:
|
||||
@ -212,8 +212,8 @@ public:
|
||||
const simple_list<software_info> &get_info() { if (!m_parsed) parse(); return m_infolist; }
|
||||
|
||||
// operations
|
||||
software_info *find(const char *look_for, software_info *prev = nullptr);
|
||||
void find_approx_matches(const char *name, int matches, software_info **list, const char *interface);
|
||||
const software_info *find(const char *look_for, const software_info *prev = nullptr);
|
||||
void find_approx_matches(const char *name, int matches, const software_info **list, const char *interface);
|
||||
void release();
|
||||
|
||||
// string pool helpers
|
||||
|
@ -149,7 +149,7 @@ media_auditor::summary media_auditor::audit_device(device_t &device, const char
|
||||
//-------------------------------------------------
|
||||
// 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
|
||||
m_record_list.clear();
|
||||
|
@ -158,7 +158,7 @@ public:
|
||||
// audit operations
|
||||
summary audit_media(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 summarize(const char *name, std::ostream *output = nullptr) const;
|
||||
|
||||
|
@ -520,7 +520,7 @@ int cli_frontend::execute(int argc, char **argv)
|
||||
bool compatible = false;
|
||||
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)
|
||||
{
|
||||
// loop through all parts
|
||||
|
@ -376,8 +376,8 @@ void mame_options::set_system_name(emu_options &options, const char *name)
|
||||
// look up the software part
|
||||
machine_config config(*cursystem, options);
|
||||
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;
|
||||
software_part *swpart = swinfo != nullptr ? swinfo->find_part(sw_part.c_str()) : nullptr;
|
||||
const software_info *swinfo = swlist != nullptr ? swlist->find(sw_name.c_str()) : nullptr;
|
||||
const software_part *swpart = swinfo != nullptr ? swinfo->find_part(sw_part.c_str()) : nullptr;
|
||||
|
||||
// then add the options
|
||||
if (new_system)
|
||||
|
@ -915,7 +915,7 @@ void menu_select_game::inkey_select_favorite(const event *menu_event)
|
||||
media_auditor auditor(drv);
|
||||
drv.next();
|
||||
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);
|
||||
|
||||
|
@ -525,9 +525,9 @@ void menu_select_software::build_software_list()
|
||||
{
|
||||
m_filter.swlist.name.push_back(swlist.list_name());
|
||||
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)
|
||||
{
|
||||
const char *instance_name = nullptr;
|
||||
@ -687,7 +687,7 @@ void menu_select_software::inkey_select(const event *menu_event)
|
||||
media_auditor auditor(drivlist);
|
||||
drivlist.next();
|
||||
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);
|
||||
|
||||
@ -1572,7 +1572,7 @@ void bios_selection::handle()
|
||||
driver_enumerator drivlist(machine().options(), *ui_swinfo->driver);
|
||||
drivlist.next();
|
||||
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()))
|
||||
{
|
||||
s_parts parts;
|
||||
|
Loading…
Reference in New Issue
Block a user