summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/plib/pstate.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/plib/pstate.h')
-rw-r--r--src/lib/netlist/plib/pstate.h45
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_ */