mirror of
https://github.com/holub/mame
synced 2025-06-05 12:26:35 +03:00
addrmap.h: Assert in case subdevice fails to find things (nw)
This commit is contained in:
parent
d672b34912
commit
db87759815
@ -231,35 +231,77 @@ public:
|
||||
// device finder -> delegate converter
|
||||
template <typename T, bool Reqd, typename U, typename Ret, typename... Params>
|
||||
address_map_entry &r(device_finder<T, Reqd> &finder, Ret (U::*read)(Params...), const char *read_name)
|
||||
{ const std::pair<device_t &, const char *> target(finder.finder_target()); device_t &device(*target.first.subdevice(target.second)); return r(emu::detail::make_delegate(read, read_name, device.tag(), make_pointer<U>(device))); }
|
||||
{
|
||||
const std::pair<device_t &, const char *> target(finder.finder_target());
|
||||
device_t *device(target.first.subdevice(target.second));
|
||||
assert(device != nullptr);
|
||||
return r(emu::detail::make_delegate(read, read_name, device->tag(), make_pointer<U>(*device)));
|
||||
}
|
||||
|
||||
template <typename T, bool Reqd, typename U, typename Ret, typename... Params>
|
||||
address_map_entry &r(const device_finder<T, Reqd> &finder, Ret (U::*read)(Params...), const char *read_name)
|
||||
{ const std::pair<device_t &, const char *> target(finder.finder_target()); device_t &device(*target.first.subdevice(target.second)); return r(emu::detail::make_delegate(read, read_name, device.tag(), make_pointer<U>(device))); }
|
||||
{
|
||||
const std::pair<device_t &, const char *> target(finder.finder_target());
|
||||
device_t *device(target.first.subdevice(target.second));
|
||||
assert(device != nullptr);
|
||||
return r(emu::detail::make_delegate(read, read_name, device->tag(), make_pointer<U>(*device)));
|
||||
}
|
||||
|
||||
template <typename T, bool Reqd, typename U, typename Ret, typename... Params>
|
||||
address_map_entry &w(device_finder<T, Reqd> &finder, Ret (U::*write)(Params...), const char *write_name)
|
||||
{ const std::pair<device_t &, const char *> target(finder.finder_target()); device_t &device(*target.first.subdevice(target.second)); return w(emu::detail::make_delegate(write, write_name, device.tag(), make_pointer<U>(device))); }
|
||||
{
|
||||
const std::pair<device_t &, const char *> target(finder.finder_target());
|
||||
device_t *device(target.first.subdevice(target.second));
|
||||
assert(device != nullptr);
|
||||
return w(emu::detail::make_delegate(write, write_name, device->tag(), make_pointer<U>(*device)));
|
||||
}
|
||||
|
||||
template <typename T, bool Reqd, typename U, typename Ret, typename... Params>
|
||||
address_map_entry &w(const device_finder<T, Reqd> &finder, Ret (U::*write)(Params...), const char *write_name)
|
||||
{ const std::pair<device_t &, const char *> target(finder.finder_target()); device_t &device(*target.first.subdevice(target.second)); return w(emu::detail::make_delegate(write, write_name, device.tag(), make_pointer<U>(device))); }
|
||||
{
|
||||
const std::pair<device_t &, const char *> target(finder.finder_target());
|
||||
device_t *device(target.first.subdevice(target.second));
|
||||
assert(device != nullptr);
|
||||
return w(emu::detail::make_delegate(write, write_name, device->tag(), make_pointer<U>(*device)));
|
||||
}
|
||||
|
||||
template <typename T, bool Reqd, typename U, typename RetR, typename... ParamsR, typename V, typename RetW, typename... ParamsW>
|
||||
address_map_entry &rw(device_finder<T, Reqd> &finder, RetR (U::*read)(ParamsR...), const char *read_name, RetW (V::*write)(ParamsW...), const char *write_name)
|
||||
{ const std::pair<device_t &, const char *> target(finder.finder_target()); device_t &device(*target.first.subdevice(target.second)); return r(emu::detail::make_delegate(read, read_name, device.tag(), make_pointer<U>(device))).w(emu::detail::make_delegate(write, write_name, device.tag(), make_pointer<V>(device))); }
|
||||
{
|
||||
const std::pair<device_t &, const char *> target(finder.finder_target());
|
||||
device_t *device(target.first.subdevice(target.second));
|
||||
assert(device != nullptr);
|
||||
return r(emu::detail::make_delegate(read, read_name, device->tag(), make_pointer<U>(*device)))
|
||||
.w(emu::detail::make_delegate(write, write_name, device->tag(), make_pointer<V>(*device)));
|
||||
}
|
||||
|
||||
template <typename T, bool Reqd, typename U, typename RetR, typename... ParamsR, typename V, typename RetW, typename... ParamsW>
|
||||
address_map_entry &rw(const device_finder<T, Reqd> &finder, RetR (U::*read)(ParamsR...), const char *read_name, RetW (V::*write)(ParamsW...), const char *write_name)
|
||||
{ const std::pair<device_t &, const char *> target(finder.finder_target()); device_t &device(*target.first.subdevice(target.second)); return r(emu::detail::make_delegate(read, read_name, device.tag(), make_pointer<U>(device))).w(emu::detail::make_delegate(write, write_name, device.tag(), make_pointer<V>(device))); }
|
||||
{
|
||||
const std::pair<device_t &, const char *> target(finder.finder_target());
|
||||
device_t *device(target.first.subdevice(target.second));
|
||||
assert(device != nullptr);
|
||||
return r(emu::detail::make_delegate(read, read_name, device->tag(), make_pointer<U>(*device)))
|
||||
.w(emu::detail::make_delegate(write, write_name, device->tag(), make_pointer<V>(*device)));
|
||||
}
|
||||
|
||||
template <typename T, bool Reqd, typename U, typename Ret, typename... Params>
|
||||
address_map_entry &m(device_finder<T, Reqd> &finder, Ret (U::*map)(Params...), const char *map_name)
|
||||
{ const std::pair<device_t &, const char *> target(finder.finder_target()); device_t &device(*target.first.subdevice(target.second)); return m(&device, make_delegate(map, map_name, make_pointer<U>(device))); }
|
||||
{
|
||||
const std::pair<device_t &, const char *> target(finder.finder_target());
|
||||
device_t *device(target.first.subdevice(target.second));
|
||||
assert(device != nullptr);
|
||||
return m(device, make_delegate(map, map_name, make_pointer<U>(*device)));
|
||||
}
|
||||
|
||||
template <typename T, bool Reqd, typename U, typename Ret, typename... Params>
|
||||
address_map_entry &m(const device_finder<T, Reqd> &finder, Ret (U::*map)(Params...), const char *map_name)
|
||||
{ const std::pair<device_t &, const char *> target(finder.finder_target()); device_t &device(*target.first.subdevice(target.second)); return m(make_delegate(map, map_name, make_pointer<U>(device))); }
|
||||
{
|
||||
const std::pair<device_t &, const char *> target(finder.finder_target());
|
||||
device_t *device(target.first.subdevice(target.second));
|
||||
assert(device != nullptr);
|
||||
return m(make_delegate(map, map_name, make_pointer<U>(*device)));
|
||||
}
|
||||
|
||||
|
||||
// lambda -> delegate converter
|
||||
|
Loading…
Reference in New Issue
Block a user