From a6b7391da533e6989506f1276a4d8062b36a7d6e Mon Sep 17 00:00:00 2001 From: Ilari Liusvaara Date: Tue, 14 Apr 2015 10:21:31 +0300 Subject: [PATCH] Refactor loaded_rom to make public fields private --- include/core/rom.hpp | 72 +++++++++++++++++++++++------------- src/core/mainloop.cpp | 2 +- src/core/moviedata.cpp | 36 +++++++++++------- src/core/moviefile.cpp | 8 ++-- src/core/rom.cpp | 9 +++-- src/core/romloader.cpp | 16 +++++--- src/lua/movie.cpp | 4 +- src/platform/wxwidgets/romselect.cpp | 12 +++--- 8 files changed, 98 insertions(+), 61 deletions(-) diff --git a/include/core/rom.hpp b/include/core/rom.hpp index 6dd4866e..5998db48 100644 --- a/include/core/rom.hpp +++ b/include/core/rom.hpp @@ -67,22 +67,6 @@ struct loaded_rom */ loaded_rom(const std::string& file, core_type& ctype) throw(std::bad_alloc, std::runtime_error); /** - * Loaded main ROM - */ - fileimage::image romimg[ROM_SLOT_COUNT]; -/** - * Loaded main ROM XML - */ - fileimage::image romxml[ROM_SLOT_COUNT]; -/** - * MSU-1 base. - */ - std::string msu1_base; -/** - * Load filename. - */ - std::string load_filename; -/** * Switches the active cartridge to this cartridge. The compatiblity between selected region and original region * is checked. Region is updated after cartridge has been loaded. * @@ -136,7 +120,28 @@ struct loaded_rom * Set internal region representation. */ void set_internal_region(core_region& reg) { region = ® } - +/** + * Access main ROM image. + * + * parameter index: The index of ROM slot to access. + * returns: The ROM image (NULL image if index is out of range). + */ + fileimage::image& get_rom(size_t index) { return get_image(index, false); } +/** + * Access ROM markup image. + * + * parameter index: The index of ROM slot to access. + * returns: The ROM markup image (NULL image if index is out of range). + */ + fileimage::image& get_markup(size_t index) { return get_image(index, true); } +/** + * Get filename of ROM pack, if any. + */ + const std::string& get_pack_filename() { return load_filename; } +/** + * Get MSU-1 base fileaname. + */ + const std::string& get_msu1_base() { return msu1_base; } //ROM methods. std::string get_core_identifier() { return rtype->get_core_identifier(); } std::pair get_scale_factors(uint32_t width, uint32_t height) @@ -204,18 +209,33 @@ struct loaded_rom return orig_region && orig_region->compatible_with(run); } private: -/** - * ROM type - */ + //Static NULL image. + static fileimage::image null_img; + //Loaded ROM images. + fileimage::image romimg[ROM_SLOT_COUNT]; + //Loaded ROM XML (markup) images. + fileimage::image romxml[ROM_SLOT_COUNT]; + //MSU-1 base filename. + std::string msu1_base; + //Load filename. + std::string load_filename; + //ROM type. core_type* rtype; -/** - * ROM region (this is the currently active region). - */ + //ROM region. core_region* region; -/** - * ROM original region (this is the region ROM is loaded as). - */ + //Region ROM was loaded as. core_region* orig_region; + //Get image. + fileimage::image& get_image(size_t index, bool xml) + { + if(index < ROM_SLOT_COUNT) { + if(xml) + return romxml[index]; + else + return romimg[index]; + } else + return null_img; + } //Handle bundle load case. void load_bundle(const std::string& file, std::istream& spec, const std::string& tmpprefer) throw(std::bad_alloc, std::runtime_error); diff --git a/src/core/mainloop.cpp b/src/core/mainloop.cpp index 590c91ac..c7cd58d6 100644 --- a/src/core/mainloop.cpp +++ b/src/core/mainloop.cpp @@ -263,7 +263,7 @@ public: std::string get_base_path() { - return CORE().rom->msu1_base; + return CORE().rom->get_msu1_base(); } time_t get_time() diff --git a/src/core/moviedata.cpp b/src/core/moviedata.cpp index 1d2f4441..7058d20b 100644 --- a/src/core/moviedata.cpp +++ b/src/core/moviedata.cpp @@ -232,9 +232,11 @@ void do_save_state(const std::string& filename, int binary) throw(std::bad_alloc target.is_savestate = true; target.sram = core.rom->save_sram(); for(size_t i = 0; i < ROM_SLOT_COUNT; i++) { - target.romimg_sha256[i] = core.rom->romimg[i].sha_256.read(); - target.romxml_sha256[i] = core.rom->romxml[i].sha_256.read(); - target.namehint[i] = core.rom->romimg[i].namehint; + auto& img = core.rom->get_rom(i); + auto& xml = core.rom->get_markup(i); + target.romimg_sha256[i] = img.sha_256.read(); + target.romxml_sha256[i] = xml.sha_256.read(); + target.namehint[i] = img.namehint; } target.savestate = core.rom->save_core_state(); core.fbuf->get_framebuffer().save(target.screenshot); @@ -390,15 +392,17 @@ namespace { bool rom_ok = true; for(size_t i = 0; i < ROM_SLOT_COUNT; i++) { + auto& img = against.get_rom(i); + auto& xml = against.get_markup(i); if(mov.namehint[i] == "") - mov.namehint[i] = against.romimg[i].namehint; + mov.namehint[i] = img.namehint; if(mov.romimg_sha256[i] == "") - mov.romimg_sha256[i] = against.romimg[i].sha_256.read(); + mov.romimg_sha256[i] = img.sha_256.read(); if(mov.romxml_sha256[i] == "") - mov.romxml_sha256[i] = against.romxml[i].sha_256.read(); - rom_ok = rom_ok & warn_hash_mismatch(mov.romimg_sha256[i], against.romimg[i], + mov.romxml_sha256[i] = xml.sha_256.read(); + rom_ok = rom_ok & warn_hash_mismatch(mov.romimg_sha256[i], img, (stringfmt() << "ROM #" << (i + 1)).str(), loadstate); - rom_ok = rom_ok & warn_hash_mismatch(mov.romxml_sha256[i], against.romxml[i], + rom_ok = rom_ok & warn_hash_mismatch(mov.romxml_sha256[i], xml, (stringfmt() << "XML #" << (i + 1)).str(), loadstate); } if(!rom_ok) @@ -470,9 +474,11 @@ void do_load_rom() throw(std::bad_alloc, std::runtime_error) handle_load_core(core.mlogic->get_mfile(), portset, false); core.mlogic->get_mfile().gametype = &core.rom->get_sysregion(); for(size_t i = 0; i < ROM_SLOT_COUNT; i++) { - core.mlogic->get_mfile().namehint[i] = core.rom->romimg[i].namehint; - core.mlogic->get_mfile().romimg_sha256[i] = core.rom->romimg[i].sha_256.read(); - core.mlogic->get_mfile().romxml_sha256[i] = core.rom->romxml[i].sha_256.read(); + auto& img = core.rom->get_rom(i); + auto& xml = core.rom->get_markup(i); + core.mlogic->get_mfile().namehint[i] = img.namehint; + core.mlogic->get_mfile().romimg_sha256[i] = img.sha_256.read(); + core.mlogic->get_mfile().romxml_sha256[i] = xml.sha_256.read(); } core.mlogic->get_mfile().is_savestate = false; core.mlogic->get_mfile().host_memory.clear(); @@ -497,9 +503,11 @@ void do_load_rom() throw(std::bad_alloc, std::runtime_error) _movie.get()->rerecords = "0"; _movie.get()->rerecords_mem = 0; for(size_t i = 0; i < ROM_SLOT_COUNT; i++) { - _movie.get()->namehint[i] = core.rom->romimg[i].namehint; - _movie.get()->romimg_sha256[i] = core.rom->romimg[i].sha_256.read(); - _movie.get()->romxml_sha256[i] = core.rom->romxml[i].sha_256.read(); + auto& img = core.rom->get_rom(i); + auto& xml = core.rom->get_markup(i); + _movie.get()->namehint[i] = img.namehint; + _movie.get()->romimg_sha256[i] = img.sha_256.read(); + _movie.get()->romxml_sha256[i] = xml.sha_256.read(); } _movie.get()->is_savestate = false; _movie.get()->save_frame = 0; diff --git a/src/core/moviefile.cpp b/src/core/moviefile.cpp index 2b16e10c..592c4731 100644 --- a/src/core/moviefile.cpp +++ b/src/core/moviefile.cpp @@ -140,9 +140,11 @@ moviefile::moviefile(loaded_rom& rom, std::map& c_sett //Initialize the remainder. rerecords = "0"; for(size_t i = 0; i < ROM_SLOT_COUNT; i++) { - romimg_sha256[i] = rom.romimg[i].sha_256.read(); - romxml_sha256[i] = rom.romxml[i].sha_256.read(); - namehint[i] = rom.romimg[i].namehint; + auto& img = rom.get_rom(i); + auto& xml = rom.get_markup(i); + romimg_sha256[i] = img.sha_256.read(); + romxml_sha256[i] = xml.sha_256.read(); + namehint[i] = img.namehint; } } } diff --git a/src/core/rom.cpp b/src/core/rom.cpp index 83e5f329..b7695d63 100644 --- a/src/core/rom.cpp +++ b/src/core/rom.cpp @@ -225,18 +225,19 @@ namespace { for(unsigned i = 0; i < ROM_SLOT_COUNT; i++) { try { - record_filehash(rom.romimg[i].filename, rom.romimg[i].stripped, - rom.romimg[i].sha_256.read()); + auto& j = rom.get_rom(i); + record_filehash(j.filename, j.stripped, j.sha_256.read()); } catch(...) {} try { - record_filehash(rom.romxml[i].filename, rom.romxml[i].stripped, - rom.romxml[i].sha_256.read()); + auto& j = rom.get_markup(i); + record_filehash(j.filename, j.stripped, j.sha_256.read()); } catch(...) {} } } } fileimage::hash lsnes_image_hasher; +fileimage::image loaded_rom::null_img; std::pair get_current_rom_info() throw() { diff --git a/src/core/romloader.cpp b/src/core/romloader.cpp index 9d21376f..b73f7277 100644 --- a/src/core/romloader.cpp +++ b/src/core/romloader.cpp @@ -102,9 +102,11 @@ bool _load_new_rom(const romload_request& req) load_new_rom_inner(req); if(*core.mlogic) for(size_t i = 0; i < ROM_SLOT_COUNT; i++) { - core.mlogic->get_mfile().romimg_sha256[i] = core.rom->romimg[i].sha_256.read(); - core.mlogic->get_mfile().romxml_sha256[i] = core.rom->romxml[i].sha_256.read(); - core.mlogic->get_mfile().namehint[i] = core.rom->romimg[i].namehint; + auto& img = core.rom->get_rom(i); + auto& xml = core.rom->get_markup(i); + core.mlogic->get_mfile().romimg_sha256[i] = img.sha_256.read(); + core.mlogic->get_mfile().romxml_sha256[i] = xml.sha_256.read(); + core.mlogic->get_mfile().namehint[i] = img.namehint; } } catch(std::exception& e) { platform::error_message(std::string("Can't load ROM: ") + e.what()); @@ -126,8 +128,10 @@ bool reload_active_rom() messages << "No ROM loaded" << std::endl; return false; } - if(core.rom->load_filename != "") { - req.packfile = core.rom->load_filename; + //Single-file ROM? + std::string loadfile = core.rom->get_pack_filename(); + if(loadfile != "") { + req.packfile = loadfile; return _load_new_rom(req); } //This is composite ROM. @@ -135,7 +139,7 @@ bool reload_active_rom() req.system = core.rom->get_iname(); req.region = core.rom->orig_region_get_iname(); for(unsigned i = 0; i < ROM_SLOT_COUNT; i++) - req.files[i] = core.rom->romimg[i].filename; + req.files[i] = core.rom->get_rom(i).filename; return _load_new_rom(req); } diff --git a/src/lua/movie.cpp b/src/lua/movie.cpp index 4fba7af1..a2536a97 100644 --- a/src/lua/movie.cpp +++ b/src/lua/movie.cpp @@ -149,8 +149,8 @@ namespace L.newtable(); for(unsigned i = 0; i < ROM_SLOT_COUNT; i++) { - auto img = &(rom.romimg[i]); - auto xml = &(rom.romxml[i]); + auto img = &rom.get_rom(i); + auto xml = &rom.get_markup(i); if(img->sha_256.read() == "") img = NULL; //Trivial image. if(xml->sha_256.read() == "") xml = NULL; //Trivial image. if(!img && !xml) continue; diff --git a/src/platform/wxwidgets/romselect.cpp b/src/platform/wxwidgets/romselect.cpp index 2ee2a895..872d99d7 100644 --- a/src/platform/wxwidgets/romselect.cpp +++ b/src/platform/wxwidgets/romselect.cpp @@ -253,7 +253,7 @@ namespace project_info pinfo(*inst.dispatch); pinfo.id = generate_project_id(); pinfo.name = tostdstring(projname->GetValue()); - pinfo.rom = inst.rom->load_filename; + pinfo.rom = inst.rom->get_pack_filename(); pinfo.last_save = ""; pinfo.directory = tostdstring(projdir->GetValue()); pinfo.prefix = tostdstring(projpfx->GetValue()); @@ -273,7 +273,7 @@ namespace inst.project->copy_watches(pinfo); inst.project->copy_macros(pinfo, *inst.controls); for(unsigned i = 0; i < ROM_SLOT_COUNT; i++) { - pinfo.roms[i] = inst.rom->romimg[i].filename; + pinfo.roms[i] = inst.rom->get_rom(i).filename; pinfo.romimg_sha256[i] = m.romimg_sha256[i]; pinfo.romxml_sha256[i] = m.romxml_sha256[i]; pinfo.namehint[i] = m.namehint[i]; @@ -677,9 +677,11 @@ struct moviefile& wxwin_project::make_movie() set_mprefix_for_project(f.projectid, tostdstring(prefix->GetValue())); f.rerecords = "0"; for(size_t i = 0; i < ROM_SLOT_COUNT; i++) { - f.romimg_sha256[i] = inst.rom->romimg[i].sha_256.read(); - f.romxml_sha256[i] = inst.rom->romxml[i].sha_256.read(); - f.namehint[i] = inst.rom->romimg[i].namehint; + auto& img = inst.rom->get_rom(i); + auto& xml = inst.rom->get_markup(i); + f.romimg_sha256[i] = img.sha_256.read(); + f.romxml_sha256[i] = xml.sha_256.read(); + f.namehint[i] = img.namehint; } size_t lines = authors->GetNumberOfLines(); for(size_t i = 0; i < lines; i++) { -- 2.11.4.GIT