aboutsummaryrefslogtreecommitdiffstats
path: root/common/pywrappers.h
diff options
context:
space:
mode:
authorDavid Shah <davey1576@gmail.com>2018-07-03 10:55:32 +0200
committerDavid Shah <davey1576@gmail.com>2018-07-04 14:55:24 +0200
commita382d906efda9b096c4e841ebcff83be85fa3e5c (patch)
treee84d6ef57da7e8cf5119bbb8043833574629115e /common/pywrappers.h
parent45ec502dedf1503fa0117c6eef4a765e4c736315 (diff)
downloadnextpnr-a382d906efda9b096c4e841ebcff83be85fa3e5c.tar.gz
nextpnr-a382d906efda9b096c4e841ebcff83be85fa3e5c.tar.bz2
nextpnr-a382d906efda9b096c4e841ebcff83be85fa3e5c.zip
python: Developing context wrappers for maps
Signed-off-by: David Shah <davey1576@gmail.com>
Diffstat (limited to 'common/pywrappers.h')
-rw-r--r--common/pywrappers.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/common/pywrappers.h b/common/pywrappers.h
index 55d70e42..125308e3 100644
--- a/common/pywrappers.h
+++ b/common/pywrappers.h
@@ -150,6 +150,25 @@ template <typename Class, typename FuncT, FuncT fn, typename rv_conv, typename a
template <typename WrapCls> static void def_wrap(WrapCls cls_, const char *name) { cls_.def(name, wrapped_fn); }
};
+// Wrapped getter
+template <typename Class, typename MemT, MemT mem, typename v_conv> struct readonly_wrapper
+{
+ using class_type = typename WrapIfNotContext<Class>::maybe_wrapped_t;
+ using conv_val_type = typename v_conv::ret_type;
+
+ static conv_val_type wrapped_getter(class_type &cls)
+ {
+ Context *ctx = get_ctx<Class>(cls);
+ Class &base = get_base<Class>(cls);
+ return v_conv()(ctx, (base.*mem));
+ }
+
+ template <typename WrapCls> static void def_wrap(WrapCls cls_, const char *name)
+ {
+ cls_.add_property(name, wrapped_getter);
+ }
+};
+
} // namespace PythonConversion
NEXTPNR_NAMESPACE_END