diff options
| author | 2021-04-12 02:11:48 -0700 | |
|---|---|---|
| committer | 2021-04-12 02:11:48 -0700 | |
| commit | 8fb0991e0372ce92ff4cb19c71e719f0421b1dae (patch) | |
| tree | 1dd3b09a3d32e095b8e289ef458d1342951c56fd | |
| parent | f65453c2321f150a40e995ce4f2cef1355dae654 (diff) | |
Add bitmap support to registrar.
| -rw-r--r-- | src/emu/save.h | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/src/emu/save.h b/src/emu/save.h index eccabc8967c..1785d041270 100644 --- a/src/emu/save.h +++ b/src/emu/save.h @@ -308,7 +308,7 @@ public: } // structures (must have a _save method) - template<typename T, std::enable_if_t<std::is_class<T>::value, bool> = true> + template<typename T, std::enable_if_t<std::is_class<T>::value && !std::is_base_of<bitmap_t, T>::value, bool> = true> save_registrar ®(T &data, char const *name) { save_registrar container(*this, save_registered_item::TYPE_STRUCT, sizeof(data), name, &data); @@ -329,12 +329,24 @@ public: // rectangle as a special case save_registrar ®(rectangle &data, char const *name) { - auto &item = m_parent.append(uintptr_t(&data) - m_baseptr, save_registered_item::TYPE_STRUCT, sizeof(data), name); - save_registrar sub(item, &data); - sub.reg(data.min_x, "min_x").reg(data.max_x, "max_x").reg(data.min_y, "min_y").reg(data.max_y, "max_y"); + save_registrar container(*this, save_registered_item::TYPE_STRUCT, sizeof(data), name, &data); + container.reg(data.min_x, "min_x") + .reg(data.max_x, "max_x") + .reg(data.min_y, "min_y") + .reg(data.max_y, "max_y"); return *this; } + // bitmaps as a special case + template<typename BitmapType> + std::enable_if_t<std::is_base_of<bitmap_t, BitmapType>::value, save_registrar> ®(BitmapType &data, char const *name) + { + save_registrar rows(*this, save_registered_item::save_type(data.height()), data.rowbytes(), name, data.raw_pixptr(0)); + save_registrar cols(rows, save_registered_item::save_type(data.width()), sizeof(BitmapType::pixel_t), "", data.raw_pixptr(0)); + cols.register_internal(data.raw_pixptr(0), save_registered_item::TYPE_UINT, sizeof(BitmapType::pixel_t), ""); + return *this; + } + private: // internal constructor save_registrar(save_registered_item &parent, void *baseptr = nullptr) : |
