MAME feature patch: Add post-save callbacks

This commit is contained in:
PGGB
2013-07-14 19:37:45 +02:00
parent 005b56974b
commit 74eeba5c35
2 changed files with 29 additions and 0 deletions
+27
View File
@@ -94,6 +94,7 @@ save_manager::save_manager(running_machine &machine)
m_illegal_regs(0),
m_entry_list(machine.respool()),
m_presave_list(machine.respool()),
m_postsave_list(machine.respool()),
m_postload_list(machine.respool())
{
}
@@ -153,6 +154,27 @@ void save_manager::register_presave(save_prepost_delegate func)
}
//-------------------------------------------------
// register_postsave - register a post-save
// function callback
//-------------------------------------------------
void save_manager::register_postsave(save_prepost_delegate func)
{
// check for invalid timing
if (!m_reg_allowed)
fatalerror("Attempt to register callback function after state registration is closed!\n");
// scan for duplicates and push through to the end
for (state_callback *cb = m_postsave_list.first(); cb != NULL; cb = cb->next())
if (cb->m_func == func)
fatalerror("Duplicate save state function (%s/%s)\n", cb->m_func.name(), func.name());
// allocate a new entry
m_postsave_list.append(*auto_alloc(machine(), state_callback(func)));
}
//-------------------------------------------------
// state_save_register_postload -
// register a post-load function callback
@@ -329,6 +351,11 @@ save_error save_manager::write_file(emu_file &file)
if (file.write(entry->m_data, totalsize) != totalsize)
return STATERR_WRITE_ERROR;
}
// call the post-save functions
for (state_callback *func = m_postsave_list.first(); func != NULL; func = func->next())
func->m_func();
return STATERR_NONE;
}
+2
View File
@@ -121,6 +121,7 @@ public:
// function registration
void register_presave(save_prepost_delegate func);
void register_postsave(save_prepost_delegate func);
void register_postload(save_prepost_delegate func);
// generic memory registration
@@ -219,6 +220,7 @@ private:
simple_list<state_entry> m_entry_list; // list of reigstered entries
simple_list<state_callback> m_presave_list; // list of pre-save functions
simple_list<state_callback> m_postsave_list; // list of post-save functions
simple_list<state_callback> m_postload_list; // list of post-load functions
};