From 91921618c2e06bd0ed073b8efccd31a127c9012d Mon Sep 17 00:00:00 2001 From: AJR Date: Wed, 20 Jan 2021 17:46:03 -0500 Subject: Much more core std::string_view modernization - Remove corestr.h from emu.h; update a few source files to not use it at all - Change strtrimspace, strtrimrightspace and core_filename_extract_* to be pure functions taking a std::string_view by value and returning the same type - Change strmakeupper and strmakelower to be pure functions taking a std::string_view and constructing a std::string - Remove the string-modifying version of zippath_parent - Change tag-based lookup functions in device_t to take std::string_view instead of const std::string & or const char * - Remove the subdevice tag cache from device_t (since device finders are now recommended) and replace it with a map covering directly owned subdevices only - Move the working directory setup method out of device_image_interface (only the UI seems to actually use the full version of this) - Change output_manager to use std::string_view for output name arguments - Change core_options to accept std::string_view for most name and value arguments (return values are still C strings for now) - Change miscellaneous other functions to accept std::string_view arguments - Remove a few string accessor macros from romload.h - Remove many unnecessary c_str() calls from logging/error messages --- src/emu/diimage.h | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) (limited to 'src/emu/diimage.h') diff --git a/src/emu/diimage.h b/src/emu/diimage.h index e9292f2f472..507fd34e1d3 100644 --- a/src/emu/diimage.h +++ b/src/emu/diimage.h @@ -149,7 +149,7 @@ public: const image_device_format *device_get_named_creatable_format(const std::string &format_name) noexcept; const util::option_guide &device_get_creation_option_guide() const { return create_option_guide(); } - const char *error(); + std::string_view error(); void seterror(image_error_t err, const char *message); void message(const char *format, ...) ATTR_PRINTF(2,3); @@ -158,7 +158,7 @@ public: const char *basename() const noexcept { return m_basename.empty() ? nullptr : m_basename.c_str(); } const char *basename_noext() const noexcept { return m_basename_noext.empty() ? nullptr : m_basename_noext.c_str(); } const std::string &filetype() const noexcept { return m_filetype; } - bool is_filetype(const std::string &candidate_filetype) { return !core_stricmp(filetype().c_str(), candidate_filetype.c_str()); } + bool is_filetype(std::string_view candidate_filetype) const; bool is_open() const noexcept { return bool(m_file); } util::core_file &image_core_file() const noexcept { return *m_file; } u64 length() { check_for_file(); return m_file->size(); } @@ -180,8 +180,10 @@ public: const char *software_list_name() const noexcept { return m_software_list_name.c_str(); } bool loaded_through_softlist() const noexcept { return m_software_part_ptr != nullptr; } + void set_working_directory(std::string_view working_directory) { m_working_directory = working_directory; } void set_working_directory(const char *working_directory) { m_working_directory = working_directory; } - const std::string &working_directory(); + void set_working_directory(std::string &&working_directory) { m_working_directory = std::move(working_directory); } + const std::string &working_directory() const { return m_working_directory; } u8 *get_software_region(const char *tag); u32 get_software_region_length(const char *tag); @@ -205,17 +207,17 @@ public: const formatlist_type &formatlist() const { return m_formatlist; } // loads an image file - image_init_result load(const std::string &path); + image_init_result load(std::string_view path); // loads a softlist item by name - image_init_result load_software(const std::string &software_identifier); + image_init_result load_software(std::string_view software_identifier); image_init_result finish_load(); void unload(); - image_init_result create(const std::string &path, const image_device_format *create_format, util::option_resolution *create_args); - image_init_result create(const std::string &path); - bool load_software(software_list_device &swlist, const char *swname, const rom_entry *entry); - int reopen_for_write(const std::string &path); + image_init_result create(std::string_view path, const image_device_format *create_format, util::option_resolution *create_args); + image_init_result create(std::string_view path); + bool load_software(software_list_device &swlist, std::string_view swname, const rom_entry *entry); + int reopen_for_write(std::string_view path); void set_user_loadable(bool user_loadable) { m_user_loadable = user_loadable; } @@ -230,26 +232,23 @@ protected: virtual const software_list_loader &get_software_list_loader() const; virtual const bool use_software_list_file_extension_for_filetype() const { return false; } - image_init_result load_internal(const std::string &path, bool is_create, int create_format, util::option_resolution *create_args); - image_error_t load_image_by_path(u32 open_flags, const std::string &path); + image_init_result load_internal(std::string_view path, bool is_create, int create_format, util::option_resolution *create_args); + image_error_t load_image_by_path(u32 open_flags, std::string_view path); void clear(); - bool is_loaded(); + bool is_loaded() const { return m_file != nullptr; } - void set_image_filename(const std::string &filename); + void set_image_filename(std::string_view filename); void clear_error(); void check_for_file() const { if (!m_file) throw emu_fatalerror("%s(%s): Illegal operation on unmounted image", device().shortname(), device().tag()); } - void setup_working_directory(); - bool try_change_working_directory(const std::string &subdir); - void make_readonly() noexcept { m_readonly = true; } bool image_checkhash(); - const software_part *find_software_item(const std::string &identifier, bool restrict_to_interface, software_list_device **device = nullptr) const; - std::string software_get_default_slot(const char *default_card_slot) const; + const software_part *find_software_item(std::string_view identifier, bool restrict_to_interface, software_list_device **device = nullptr) const; + std::string software_get_default_slot(std::string_view default_card_slot) const; void add_format(std::unique_ptr &&format); void add_format(std::string &&name, std::string &&description, std::string &&extensions, std::string &&optspec); @@ -281,14 +280,14 @@ private: static image_error_t image_error_from_file_error(osd_file::error filerr); std::vector determine_open_plan(bool is_create); void update_names(); - bool load_software_part(const std::string &identifier); + bool load_software_part(std::string_view identifier); bool init_phase() const; static bool run_hash(util::core_file &file, u32 skip_bytes, util::hash_collection &hashes, const char *types); // loads an image or software items and resets - called internally when we // load an is_reset_on_load() item - void reset_and_load(const std::string &path); + void reset_and_load(std::string_view path); // creation info formatlist_type m_formatlist; -- cgit v1.2.3-70-g09d2