mirror of
https://github.com/holub/mame
synced 2025-06-06 04:43:45 +03:00
Merge pull request #1223 from npwoods/more_softlist_stdstring
Converted more softlist code to use std::string
This commit is contained in:
commit
88779c9b10
@ -1321,10 +1321,10 @@ const software_part *device_image_interface::find_software_item(const std::strin
|
||||
{
|
||||
if (swlist_name.compare(swlistdev.list_name())==0 || !(swlist_name.length() > 0))
|
||||
{
|
||||
const software_info *info = swlistdev.find(swinfo_name.c_str());
|
||||
const software_info *info = swlistdev.find(swinfo_name);
|
||||
if (info != nullptr)
|
||||
{
|
||||
const software_part *part = info->find_part(swpart_name.c_str(), interface);
|
||||
const software_part *part = info->find_part(swpart_name, interface);
|
||||
if (part != nullptr)
|
||||
{
|
||||
if (dev != nullptr)
|
||||
@ -1340,10 +1340,10 @@ const software_part *device_image_interface::find_software_item(const std::strin
|
||||
// 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
|
||||
const software_info *info = swlistdev.find(swpart_name.c_str());
|
||||
const software_info *info = swlistdev.find(swpart_name);
|
||||
if (info != nullptr)
|
||||
{
|
||||
const software_part *part = info->find_part(nullptr, interface);
|
||||
const software_part *part = info->find_part("", interface);
|
||||
if (part != nullptr)
|
||||
{
|
||||
if (dev != nullptr)
|
||||
|
@ -101,20 +101,16 @@ bool software_part::matches_interface(const char *interface_list) const
|
||||
// software_info - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
software_info::software_info(std::string &&name, std::string &&parent, const char *supported)
|
||||
: m_next(nullptr),
|
||||
m_supported(SOFTWARE_SUPPORTED_YES),
|
||||
software_info::software_info(std::string &&name, std::string &&parent, const std::string &supported)
|
||||
: m_supported(SOFTWARE_SUPPORTED_YES),
|
||||
m_shortname(std::move(name)),
|
||||
m_parentname(std::move(parent))
|
||||
{
|
||||
// handle the supported flag if provided
|
||||
if (supported != nullptr)
|
||||
{
|
||||
if (strcmp(supported, "partial") == 0)
|
||||
m_supported = SOFTWARE_SUPPORTED_PARTIAL;
|
||||
else if (strcmp(supported, "no") == 0)
|
||||
m_supported = SOFTWARE_SUPPORTED_NO;
|
||||
}
|
||||
if (supported == "partial")
|
||||
m_supported = SOFTWARE_SUPPORTED_PARTIAL;
|
||||
else if (supported == "no")
|
||||
m_supported = SOFTWARE_SUPPORTED_NO;
|
||||
}
|
||||
|
||||
|
||||
@ -123,22 +119,20 @@ software_info::software_info(std::string &&name, std::string &&parent, const cha
|
||||
// optional interface match
|
||||
//-------------------------------------------------
|
||||
|
||||
const software_part *software_info::find_part(const char *partname, const char *interface) const
|
||||
const software_part *software_info::find_part(const std::string &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;
|
||||
|
||||
if (partname == nullptr && interface == nullptr)
|
||||
if (partname.empty() && interface == nullptr)
|
||||
return &m_partdata.front();
|
||||
|
||||
// look for the part by name and match against the interface if provided
|
||||
for (const software_part &part : m_partdata)
|
||||
if (partname != nullptr && (partname == part.name()))
|
||||
if (!partname.empty() && (partname == part.name()))
|
||||
{
|
||||
if (interface == nullptr || part.matches_interface(interface))
|
||||
return ∂
|
||||
}
|
||||
else if (partname == nullptr && part.matches_interface(interface))
|
||||
else if (partname.empty() && part.matches_interface(interface))
|
||||
return ∂
|
||||
return nullptr;
|
||||
}
|
||||
|
@ -106,14 +106,13 @@ class software_info
|
||||
|
||||
public:
|
||||
// construction/destruction
|
||||
software_info(std::string &&name, std::string &&parent, const char *supported);
|
||||
software_info(std::string &&name, std::string &&parent, const std::string &supported);
|
||||
software_info(software_info const &) = delete;
|
||||
software_info(software_info &&) = delete;
|
||||
software_info& operator=(software_info const &) = delete;
|
||||
software_info& operator=(software_info &&) = delete;
|
||||
|
||||
// getters
|
||||
software_info *next() const { return m_next; }
|
||||
const std::string &shortname() const { return m_shortname; }
|
||||
const std::string &longname() const { return m_longname; }
|
||||
const std::string &parentname() const { return m_parentname; }
|
||||
@ -125,12 +124,11 @@ public:
|
||||
const std::list<software_part> &parts() const { return m_partdata; }
|
||||
|
||||
// additional operations
|
||||
const software_part *find_part(const char *partname, const char *interface = nullptr) const;
|
||||
const software_part *find_part(const std::string &partname, const char *interface = nullptr) const;
|
||||
bool has_multiple_parts(const char *interface) const;
|
||||
|
||||
private:
|
||||
// internal state
|
||||
software_info * m_next;
|
||||
UINT32 m_supported;
|
||||
std::string m_shortname;
|
||||
std::string m_longname;
|
||||
|
@ -252,13 +252,13 @@ void software_list_device::display_matches(const machine_config &config, const c
|
||||
// from an intermediate point
|
||||
//-------------------------------------------------
|
||||
|
||||
const software_info *software_list_device::find(const char *look_for)
|
||||
const software_info *software_list_device::find(const std::string &look_for)
|
||||
{
|
||||
// nullptr search returns nothing
|
||||
if (look_for == nullptr)
|
||||
// empty search returns nothing
|
||||
if (look_for.empty())
|
||||
return nullptr;
|
||||
|
||||
bool iswild = strchr(look_for, '*') != nullptr || strchr(look_for, '?');
|
||||
const bool iswild = look_for.find_first_of("*?") != std::string::npos;
|
||||
|
||||
// find a match (will cause a parse if needed when calling get_info)
|
||||
const auto &info_list = get_info();
|
||||
@ -268,8 +268,8 @@ const software_info *software_list_device::find(const char *look_for)
|
||||
[&](const software_info &info)
|
||||
{
|
||||
const char *shortname = info.shortname().c_str();
|
||||
return (iswild && core_strwildcmp(look_for, shortname) == 0)
|
||||
|| core_stricmp(look_for, shortname) == 0;
|
||||
return (iswild && core_strwildcmp(look_for.c_str(), shortname) == 0)
|
||||
|| core_stricmp(look_for.c_str(), shortname) == 0;
|
||||
});
|
||||
|
||||
return iter != info_list.end()
|
||||
|
@ -151,7 +151,7 @@ public:
|
||||
const std::list<software_info> &get_info() { if (!m_parsed) parse(); return m_infolist; }
|
||||
|
||||
// operations
|
||||
const software_info *find(const char *look_for);
|
||||
const software_info *find(const std::string &look_for);
|
||||
void find_approx_matches(const std::string &name, int matches, const software_info **list, const char *interface);
|
||||
void release();
|
||||
software_compatibility is_compatible(const software_part &part) const;
|
||||
|
Loading…
Reference in New Issue
Block a user