mirror of
https://github.com/holub/mame
synced 2025-06-07 21:33: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))
|
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)
|
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 (part != nullptr)
|
||||||
{
|
{
|
||||||
if (dev != 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
|
// 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
|
||||||
const software_info *info = swlistdev.find(swpart_name.c_str());
|
const software_info *info = swlistdev.find(swpart_name);
|
||||||
if (info != nullptr)
|
if (info != nullptr)
|
||||||
{
|
{
|
||||||
const software_part *part = info->find_part(nullptr, interface);
|
const software_part *part = info->find_part("", interface);
|
||||||
if (part != nullptr)
|
if (part != nullptr)
|
||||||
{
|
{
|
||||||
if (dev != nullptr)
|
if (dev != nullptr)
|
||||||
|
@ -101,20 +101,16 @@ bool software_part::matches_interface(const char *interface_list) const
|
|||||||
// software_info - constructor
|
// software_info - constructor
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
software_info::software_info(std::string &&name, std::string &&parent, const char *supported)
|
software_info::software_info(std::string &&name, std::string &&parent, const std::string &supported)
|
||||||
: m_next(nullptr),
|
: m_supported(SOFTWARE_SUPPORTED_YES),
|
||||||
m_supported(SOFTWARE_SUPPORTED_YES),
|
|
||||||
m_shortname(std::move(name)),
|
m_shortname(std::move(name)),
|
||||||
m_parentname(std::move(parent))
|
m_parentname(std::move(parent))
|
||||||
{
|
{
|
||||||
// handle the supported flag if provided
|
// handle the supported flag if provided
|
||||||
if (supported != nullptr)
|
if (supported == "partial")
|
||||||
{
|
m_supported = SOFTWARE_SUPPORTED_PARTIAL;
|
||||||
if (strcmp(supported, "partial") == 0)
|
else if (supported == "no")
|
||||||
m_supported = SOFTWARE_SUPPORTED_PARTIAL;
|
m_supported = SOFTWARE_SUPPORTED_NO;
|
||||||
else if (strcmp(supported, "no") == 0)
|
|
||||||
m_supported = SOFTWARE_SUPPORTED_NO;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -123,22 +119,20 @@ software_info::software_info(std::string &&name, std::string &&parent, const cha
|
|||||||
// optional interface match
|
// 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 neither partname nor interface supplied, then we just return the first entry
|
||||||
if (partname != nullptr && strlen(partname)==0) partname = nullptr;
|
if (partname.empty() && interface == nullptr)
|
||||||
|
|
||||||
if (partname == nullptr && interface == nullptr)
|
|
||||||
return &m_partdata.front();
|
return &m_partdata.front();
|
||||||
|
|
||||||
// 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 (const software_part &part : m_partdata)
|
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))
|
if (interface == nullptr || part.matches_interface(interface))
|
||||||
return ∂
|
return ∂
|
||||||
}
|
}
|
||||||
else if (partname == nullptr && part.matches_interface(interface))
|
else if (partname.empty() && part.matches_interface(interface))
|
||||||
return ∂
|
return ∂
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
@ -106,14 +106,13 @@ class software_info
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
// construction/destruction
|
// 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 const &) = delete;
|
||||||
software_info(software_info &&) = delete;
|
software_info(software_info &&) = delete;
|
||||||
software_info& operator=(software_info const &) = delete;
|
software_info& operator=(software_info const &) = delete;
|
||||||
software_info& operator=(software_info &&) = delete;
|
software_info& operator=(software_info &&) = delete;
|
||||||
|
|
||||||
// getters
|
// getters
|
||||||
software_info *next() const { return m_next; }
|
|
||||||
const std::string &shortname() const { return m_shortname; }
|
const std::string &shortname() const { return m_shortname; }
|
||||||
const std::string &longname() const { return m_longname; }
|
const std::string &longname() const { return m_longname; }
|
||||||
const std::string &parentname() const { return m_parentname; }
|
const std::string &parentname() const { return m_parentname; }
|
||||||
@ -125,12 +124,11 @@ public:
|
|||||||
const std::list<software_part> &parts() const { return m_partdata; }
|
const std::list<software_part> &parts() const { return m_partdata; }
|
||||||
|
|
||||||
// additional operations
|
// 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;
|
bool has_multiple_parts(const char *interface) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// internal state
|
// internal state
|
||||||
software_info * m_next;
|
|
||||||
UINT32 m_supported;
|
UINT32 m_supported;
|
||||||
std::string m_shortname;
|
std::string m_shortname;
|
||||||
std::string m_longname;
|
std::string m_longname;
|
||||||
|
@ -252,13 +252,13 @@ void software_list_device::display_matches(const machine_config &config, const c
|
|||||||
// from an intermediate point
|
// 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
|
// empty search returns nothing
|
||||||
if (look_for == nullptr)
|
if (look_for.empty())
|
||||||
return nullptr;
|
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)
|
// find a match (will cause a parse if needed when calling get_info)
|
||||||
const auto &info_list = 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 software_info &info)
|
||||||
{
|
{
|
||||||
const char *shortname = info.shortname().c_str();
|
const char *shortname = info.shortname().c_str();
|
||||||
return (iswild && core_strwildcmp(look_for, shortname) == 0)
|
return (iswild && core_strwildcmp(look_for.c_str(), shortname) == 0)
|
||||||
|| core_stricmp(look_for, shortname) == 0;
|
|| core_stricmp(look_for.c_str(), shortname) == 0;
|
||||||
});
|
});
|
||||||
|
|
||||||
return iter != info_list.end()
|
return iter != info_list.end()
|
||||||
|
@ -151,7 +151,7 @@ public:
|
|||||||
const std::list<software_info> &get_info() { if (!m_parsed) parse(); return m_infolist; }
|
const std::list<software_info> &get_info() { if (!m_parsed) parse(); return m_infolist; }
|
||||||
|
|
||||||
// operations
|
// 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 find_approx_matches(const std::string &name, int matches, const software_info **list, const char *interface);
|
||||||
void release();
|
void release();
|
||||||
software_compatibility is_compatible(const software_part &part) const;
|
software_compatibility is_compatible(const software_part &part) const;
|
||||||
|
Loading…
Reference in New Issue
Block a user