99#include < type_traits>
1010
1111// Define supertype relationships
12- namespace jlcxx {
13- template <typename T, typename K> struct SuperType <Container<T, K>> {
14- typedef Attributable type;
12+ namespace jlcxx
13+ {
14+ template <typename T, typename K>
15+ struct SuperType <Container<T, K>>
16+ {
17+ typedef Attributable type;
1518};
1619} // namespace jlcxx
1720
@@ -22,62 +25,69 @@ typedef jlcxx::TypeWrapper<
2225extern std::unique_ptr<julia_Container_type_t> julia_Container_type;
2326
2427template <typename Eltype, typename Keytype>
25- void define_julia_Container (jlcxx::Module &mod) {
26- if (!julia_Container_type)
27- julia_Container_type = std::make_unique<julia_Container_type_t>(
28- mod.add_type <jlcxx::Parametric<jlcxx::TypeVar<1 >, jlcxx::TypeVar<2 >>>(
29- " CXX_Container" , jlcxx::julia_base_type<Attributable>()));
28+ void define_julia_Container (jlcxx::Module &mod)
29+ {
30+ if (!julia_Container_type)
31+ julia_Container_type = std::make_unique<julia_Container_type_t>(
32+ mod.add_type <
33+ jlcxx::Parametric<jlcxx::TypeVar<1 >, jlcxx::TypeVar<2 >>>(
34+ " CXX_Container" , jlcxx::julia_base_type<Attributable>()));
3035
31- julia_Container_type->apply <Container<Eltype, Keytype>>([](auto type) {
32- using ContainerT = typename decltype (type)::type;
33- using key_type = typename ContainerT::key_type;
34- using mapped_type = typename ContainerT::mapped_type;
35- using size_type = typename ContainerT::size_type;
36- static_assert (std::is_same_v<Eltype, mapped_type>);
37- static_assert (std::is_same_v<Keytype, key_type>);
36+ julia_Container_type->apply <Container<Eltype, Keytype>>([](auto type) {
37+ using ContainerT = typename decltype (type)::type;
38+ using key_type = typename ContainerT::key_type;
39+ using mapped_type = typename ContainerT::mapped_type;
40+ using size_type = typename ContainerT::size_type;
41+ static_assert (std::is_same_v<Eltype, mapped_type>);
42+ static_assert (std::is_same_v<Keytype, key_type>);
3843
39- type.template constructor <const ContainerT &>();
44+ type.template constructor <const ContainerT &>();
4045
41- type.method (" cxx_empty" , &ContainerT::empty);
42- type.method (" cxx_length" , &ContainerT::size);
43- type.method (" cxx_empty!" , &ContainerT::clear);
44- // type.method("cxx_getindex",
45- // static_cast<mapped_type &(ContainerT::*)(const key_type &)>(
46- // &ContainerT::at));
47- type.method (" cxx_getindex" ,
48- [](ContainerT &cont, const key_type &key) -> mapped_type & {
49- return cont[key];
50- });
51- type.method (" cxx_setindex!" ,
52- [](ContainerT &cont, const mapped_type &value,
53- const key_type &key) { return cont[key] = value; });
54- type.method (" cxx_count" , &ContainerT::count);
55- type.method (" cxx_contains" , &ContainerT::contains);
56- type.method (" cxx_delete!" ,
57- static_cast <size_type (ContainerT::*)(const key_type &)>(
58- &ContainerT::erase));
59- type.method (" cxx_keys" , [](const ContainerT &cont) {
60- std::vector<key_type> res;
61- res.reserve (cont.size ());
62- for (auto iter = cont.begin (); iter != cont.end (); ++iter)
63- res.push_back (iter->first );
64- return res;
46+ type.method (" cxx_empty" , &ContainerT::empty);
47+ type.method (" cxx_length" , &ContainerT::size);
48+ type.method (" cxx_empty!" , &ContainerT::clear);
49+ // type.method("cxx_getindex",
50+ // static_cast<mapped_type &(ContainerT::*)(const key_type
51+ // &)>(
52+ // &ContainerT::at));
53+ type.method (
54+ " cxx_getindex" ,
55+ [](ContainerT &cont, const key_type &key) -> mapped_type & {
56+ return cont[key];
57+ });
58+ type.method (
59+ " cxx_setindex!" ,
60+ [](ContainerT &cont,
61+ const mapped_type &value,
62+ const key_type &key) { return cont[key] = value; });
63+ type.method (" cxx_count" , &ContainerT::count);
64+ type.method (" cxx_contains" , &ContainerT::contains);
65+ type.method (
66+ " cxx_delete!" ,
67+ static_cast <size_type (ContainerT::*)(const key_type &)>(
68+ &ContainerT::erase));
69+ type.method (" cxx_keys" , [](const ContainerT &cont) {
70+ std::vector<key_type> res;
71+ res.reserve (cont.size ());
72+ for (auto iter = cont.begin (); iter != cont.end (); ++iter)
73+ res.push_back (iter->first );
74+ return res;
75+ });
76+ // type.method("cxx_values", [](const ContainerT &cont) {
77+ // std::vector<mapped_type *> res;
78+ // res.reserve(cont.size());
79+ // for (auto iter = cont.begin(); iter != cont.end(); ++iter)
80+ // res.push_back(&iter->second);
81+ // return res;
82+ // });
83+ // type.method("cxx_collect", [](const ContainerT &cont) {
84+ // std::vector<std::pair<key_type, mapped_type *>> res;
85+ // res.reserve(cont.size());
86+ // for (auto iter = cont.begin(); iter != cont.end(); ++iter)
87+ // res.emplace_back(iter->first, &iter->second);
88+ // return res;
89+ // });
6590 });
66- // type.method("cxx_values", [](const ContainerT &cont) {
67- // std::vector<mapped_type *> res;
68- // res.reserve(cont.size());
69- // for (auto iter = cont.begin(); iter != cont.end(); ++iter)
70- // res.push_back(&iter->second);
71- // return res;
72- // });
73- // type.method("cxx_collect", [](const ContainerT &cont) {
74- // std::vector<std::pair<key_type, mapped_type *>> res;
75- // res.reserve(cont.size());
76- // for (auto iter = cont.begin(); iter != cont.end(); ++iter)
77- // res.emplace_back(iter->first, &iter->second);
78- // return res;
79- // });
80- });
8191}
8292
8393#endif // #ifndef CONTAINER_HPP
0 commit comments