diff options
Diffstat (limited to 'src/lib/netlist/plib/pstate.h')
-rw-r--r-- | src/lib/netlist/plib/pstate.h | 45 |
1 files changed, 32 insertions, 13 deletions
diff --git a/src/lib/netlist/plib/pstate.h b/src/lib/netlist/plib/pstate.h index 91c67ee0e1c..88c0c005927 100644 --- a/src/lib/netlist/plib/pstate.h +++ b/src/lib/netlist/plib/pstate.h @@ -15,19 +15,6 @@ // state saving ... // ---------------------------------------------------------------------------------------- -#define PSTATE_INTERFACE_DECL() \ - template<typename C> ATTR_COLD void save(C &state, const pstring &stname); \ - template<typename C, std::size_t N> ATTR_COLD void save(C (&state)[N], const pstring &stname); \ - template<typename C> ATTR_COLD void save(C *state, const pstring &stname, const int count); - -#define PSTATE_INTERFACE(obj, manager, module) \ - template<typename C> ATTR_COLD void obj::save(C &state, const pstring &stname) \ - { manager->save_item(state, this, module + "." + stname); } \ - template<typename C, std::size_t N> ATTR_COLD void obj::save(C (&state)[N], const pstring &stname) \ - { manager->save_state_ptr(module + "." + stname, pstate_datatype<C>::type, this, sizeof(state[0]), N, &(state[0]), false); } \ - template<typename C> ATTR_COLD void obj::save(C *state, const pstring &stname, const int count) \ - { manager->save_state_ptr(module + "." + stname, pstate_datatype<C>::type, this, sizeof(C), count, state, false); } - enum pstate_data_type_e { NOT_SUPPORTED, DT_CUSTOM, @@ -148,6 +135,12 @@ public: save_state_ptr(stname, pstate_datatype<C>::type, owner, sizeof(C), count, state, false); } + template<typename C> + void save_item(std::vector<C> &v, const void *owner, const pstring &stname) + { + save_state(v.data(), owner, stname, v.size()); + } + ATTR_COLD void pre_save(); ATTR_COLD void post_load(); ATTR_COLD void remove_save_items(const void *owner); @@ -164,5 +157,31 @@ private: template<> ATTR_COLD void pstate_manager_t::save_item(pstate_callback_t &state, const void *owner, const pstring &stname); +template <typename T> +class pstate_interface_t +{ +public: + pstate_interface_t() { } + + template<typename C> void save(C &state, const pstring &stname) + { + pstate_manager_t *manager = static_cast<T*>(this)->state_manager(); + pstring module = static_cast<T*>(this)->name(); + manager->save_item(state, this, module + "." + stname); + } + template<typename C, std::size_t N> ATTR_COLD void save(C (&state)[N], const pstring &stname) + { + pstate_manager_t *manager = static_cast<T*>(this)->state_manager(); + pstring module = static_cast<T*>(this)->name(); + manager->save_state_ptr(module + "." + stname, pstate_datatype<C>::type, this, sizeof(state[0]), N, &(state[0]), false); + } + template<typename C> ATTR_COLD void save(C *state, const pstring &stname, const int count) + { + pstate_manager_t *manager = static_cast<T*>(this)->state_manager(); + pstring module = static_cast<T*>(this)->name(); + manager->save_state_ptr(module + "." + stname, pstate_datatype<C>::type, this, sizeof(C), count, state, false); + } +}; + #endif /* PSTATE_H_ */ |