Merge pull request #1223 from npwoods/more_softlist_stdstring

Converted more softlist code to use std::string
This commit is contained in:
Vas Crabb 2016-08-10 22:38:57 +10:00 committed by GitHub
commit 88779c9b10
5 changed files with 23 additions and 31 deletions

View File

@ -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)

View File

@ -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;
}

View File

@ -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;

View File

@ -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()

View File

@ -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;