MAME feature patch: Add post-save callbacks
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user