Refactor loaded_rom to make public fields private

This commit is contained in:
Ilari Liusvaara 2015-04-14 10:21:31 +03:00
parent 8af9dda77f
commit a6b7391da5
8 changed files with 98 additions and 61 deletions

View file

@ -66,22 +66,6 @@ struct loaded_rom
* throws std::runtime_error: Loading ROM file failed.
*/
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<uint32_t, uint32_t> 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);

View file

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

View file

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

View file

@ -140,9 +140,11 @@ moviefile::moviefile(loaded_rom& rom, std::map<std::string, std::string>& 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;
}
}
}

View file

@ -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<core_type*, core_region*> get_current_rom_info() throw()
{

View file

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

View file

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

View file

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