diff options
author | David Shah <dave@ds0.me> | 2018-12-14 13:11:02 +0000 |
---|---|---|
committer | David Shah <dave@ds0.me> | 2019-03-22 10:31:54 +0000 |
commit | a8289b699fd12305abca6df52f20d4e80c834122 (patch) | |
tree | b3ecc0ccca22e79d1a431bc0f4912f40fd2577e8 | |
parent | 493d6c3fb93fb7ffe96609ded9e392b327b2c86c (diff) | |
download | nextpnr-a8289b699fd12305abca6df52f20d4e80c834122.tar.gz nextpnr-a8289b699fd12305abca6df52f20d4e80c834122.tar.bz2 nextpnr-a8289b699fd12305abca6df52f20d4e80c834122.zip |
pycontainers: Implement __contains__
Signed-off-by: David Shah <dave@ds0.me>
-rw-r--r-- | common/pycontainers.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/common/pycontainers.h b/common/pycontainers.h index 70f69c51..5de2f6d2 100644 --- a/common/pycontainers.h +++ b/common/pycontainers.h @@ -345,6 +345,12 @@ template <typename T, typename value_conv> struct map_wrapper std::terminate(); } + static bool contains(wrapped_map &x, std::string const &i) + { + K k = PythonConversion::string_converter<K>().from_str(x.ctx, i); + return x.base.count(k); + } + static void wrap(const char *map_name, const char *kv_name, const char *kv_iter_name, const char *iter_name) { map_pair_wrapper<typename KV::first_type, typename KV::second_type, value_conv>::wrap(kv_name, kv_iter_name); @@ -353,6 +359,7 @@ template <typename T, typename value_conv> struct map_wrapper class_<wrapped_map>(map_name, no_init) .def("__iter__", rw::iter) .def("__len__", len) + .def("__contains__", contains) .def("__getitem__", get) .def("__setitem__", set, with_custodian_and_ward<1, 2>()); } @@ -465,6 +472,12 @@ template <typename T> struct map_wrapper_uptr std::terminate(); } + static bool contains(wrapped_map &x, std::string const &i) + { + K k = PythonConversion::string_converter<K>().from_str(x.ctx, i); + return x.base.count(k); + } + static void wrap(const char *map_name, const char *kv_name, const char *kv_iter_name, const char *iter_name) { map_pair_wrapper_uptr<typename KV::first_type, typename KV::second_type>::wrap(kv_name, kv_iter_name); @@ -473,6 +486,7 @@ template <typename T> struct map_wrapper_uptr class_<wrapped_map>(map_name, no_init) .def("__iter__", rw::iter) .def("__len__", len) + .def("__contains__", contains) .def("__getitem__", get) .def("__setitem__", set, with_custodian_and_ward<1, 2>()); } |