diff options
author | David Shah <davey1576@gmail.com> | 2018-07-03 10:55:32 +0200 |
---|---|---|
committer | David Shah <davey1576@gmail.com> | 2018-07-04 14:55:24 +0200 |
commit | a382d906efda9b096c4e841ebcff83be85fa3e5c (patch) | |
tree | e84d6ef57da7e8cf5119bbb8043833574629115e /common/pywrappers.h | |
parent | 45ec502dedf1503fa0117c6eef4a765e4c736315 (diff) | |
download | nextpnr-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.h | 19 |
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 |