summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/addrmap.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/addrmap.h')
-rw-r--r--src/emu/addrmap.h39
1 files changed, 13 insertions, 26 deletions
diff --git a/src/emu/addrmap.h b/src/emu/addrmap.h
index bee03100229..7d350c14afd 100644
--- a/src/emu/addrmap.h
+++ b/src/emu/addrmap.h
@@ -71,13 +71,6 @@ class address_map_entry
{
friend class address_map;
- template <typename T, typename Ret, typename... Params>
- using is_addrmap_method = std::bool_constant<std::is_constructible_v<address_map_constructor, Ret (T::*)(Params...), const char *, T *> >;
-
- template <typename T, typename Ret, typename... Params>
- static std::enable_if_t<is_addrmap_method<T, Ret, Params...>::value, address_map_constructor> make_delegate(Ret (T::*func)(Params...), const char *name, T *obj)
- { return address_map_constructor(func, name, obj); }
-
template <typename T, bool Reqd>
static device_t &find_device(const device_finder<T, Reqd> &finder) {
const std::pair<device_t &, const char *> target(finder.finder_target());
@@ -281,7 +274,7 @@ public:
template <typename T, typename Ret, typename... Params>
address_map_entry &m(Ret (T::*map)(Params...), const char *map_name)
- { return m(&m_devbase, make_delegate(map, map_name, make_pointer<T>(m_devbase))); }
+ { return m(&m_devbase, address_map_constructor(map, map_name, make_pointer<T>(m_devbase))); }
// device tag -> delegate converter
@@ -299,7 +292,7 @@ public:
template <typename T, typename Ret, typename... Params>
address_map_entry &m(const char *tag, Ret (T::*map)(Params...), const char *map_name)
- { return m(tag, make_delegate(map, map_name, static_cast<T *>(nullptr))); }
+ { return m(tag, address_map_constructor(map, map_name, static_cast<T *>(nullptr))); }
// device reference -> delegate converter
@@ -317,58 +310,52 @@ public:
template <typename T, typename U, typename Ret, typename... Params>
address_map_entry &m(T &obj, Ret (U::*map)(Params...), const char *map_name)
- { return m(make_pointer<device_t>(obj), make_delegate(map, map_name, make_pointer<U>(obj))); }
+ { return m(make_pointer<device_t>(obj), address_map_constructor(map, map_name, make_pointer<U>(obj))); }
// 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) {
- device_t &device(find_device(finder));
- return r(emu::rw_delegate(device, DEVICE_SELF, read, read_name));
+ return r(emu::rw_delegate(finder, read, read_name));
}
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) {
- device_t &device(find_device(finder));
- return r(emu::rw_delegate(device, DEVICE_SELF, read, read_name));
+ return r(emu::rw_delegate(finder, read, read_name));
}
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) {
- device_t &device(find_device(finder));
- return w(emu::rw_delegate(device, DEVICE_SELF, write, write_name));
+ return w(emu::rw_delegate(finder, write, write_name));
}
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) {
- device_t &device(find_device(finder));
- return w(emu::rw_delegate(device, DEVICE_SELF, write, write_name));
+ return w(emu::rw_delegate(finder, write, write_name));
}
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) {
- device_t &device(find_device(finder));
- return r(emu::rw_delegate(device, DEVICE_SELF, read, read_name))
- .w(emu::rw_delegate(device, DEVICE_SELF, write, write_name));
+ return r(emu::rw_delegate(finder, read, read_name))
+ .w(emu::rw_delegate(finder, write, write_name));
}
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) {
- device_t &device(find_device(finder));
- return r(emu::rw_delegate(device, DEVICE_SELF, read, read_name))
- .w(emu::rw_delegate(device, DEVICE_SELF, write, write_name));
+ return r(emu::rw_delegate(finder, read, read_name))
+ .w(emu::rw_delegate(finder, write, write_name));
}
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) {
device_t &device(find_device(finder));
- return m(&device, make_delegate(map, map_name, make_pointer<U>(device)));
+ return m(&device, address_map_constructor(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) {
device_t &device(find_device(finder));
- return m(&device, make_delegate(map, map_name, make_pointer<U>(device)));
+ return m(&device, address_map_constructor(map, map_name, make_pointer<U>(device)));
}