Add smart_holder_from_unique_ptr() specialization for std::unique_ptr<T const, D>

Enables removing:
4 BAKEIN_BREAK in test_class_sh_basic.cpp
2 BAKEIN_BREAK in test_class_sh_basic.py
This commit is contained in:
Ralf W. Grosse-Kunstleve 2024-07-03 06:22:54 -07:00
parent 7a6d30ca58
commit 5957133b6e
3 changed files with 20 additions and 6 deletions

View File

@ -82,6 +82,19 @@ handle smart_holder_from_unique_ptr(std::unique_ptr<T, D> &&src,
return inst.release(); return inst.release();
} }
template <typename T, typename D>
handle smart_holder_from_unique_ptr(std::unique_ptr<T const, D> &&src,
return_value_policy policy,
handle parent,
const std::pair<const void *, const type_info *> &st) {
return smart_holder_from_unique_ptr(
std::unique_ptr<T, D>(const_cast<T *>(src.release()),
std::move(src.get_deleter())), // Const2Mutbl
policy,
parent,
st);
}
template <typename T, typename D> template <typename T, typename D>
handle handle
unique_ptr_to_python(std::unique_ptr<T, D> &&unq_ptr, return_value_policy policy, handle parent) { unique_ptr_to_python(std::unique_ptr<T, D> &&unq_ptr, return_value_policy policy, handle parent) {
@ -101,6 +114,7 @@ unique_ptr_to_python(std::unique_ptr<T, D> &&unq_ptr, return_value_policy policy
nullptr, nullptr,
std::addressof(unq_ptr)); std::addressof(unq_ptr));
} }
template <typename T> template <typename T>
handle smart_holder_from_shared_ptr(const std::shared_ptr<T> &src, handle smart_holder_from_shared_ptr(const std::shared_ptr<T> &src,
return_value_policy policy, return_value_policy policy,

View File

@ -173,25 +173,25 @@ TEST_SUBMODULE(class_sh_basic, m) {
m.def("pass_shcp", pass_shcp); m.def("pass_shcp", pass_shcp);
m.def("rtrn_uqmp", rtrn_uqmp); m.def("rtrn_uqmp", rtrn_uqmp);
// BAKEIN_BREAK m.def("rtrn_uqcp", rtrn_uqcp); m.def("rtrn_uqcp", rtrn_uqcp);
// BAKEIN_BREAK m.def("pass_uqmp", pass_uqmp); // BAKEIN_BREAK m.def("pass_uqmp", pass_uqmp);
// BAKEIN_BREAK m.def("pass_uqcp", pass_uqcp); // BAKEIN_BREAK m.def("pass_uqcp", pass_uqcp);
m.def("rtrn_udmp", rtrn_udmp); m.def("rtrn_udmp", rtrn_udmp);
// BAKEIN_BREAK m.def("rtrn_udcp", rtrn_udcp); m.def("rtrn_udcp", rtrn_udcp);
// BAKEIN_BREAK m.def("pass_udmp", pass_udmp); // BAKEIN_BREAK m.def("pass_udmp", pass_udmp);
// BAKEIN_BREAK m.def("pass_udcp", pass_udcp); // BAKEIN_BREAK m.def("pass_udcp", pass_udcp);
m.def("rtrn_udmp_del", rtrn_udmp_del); m.def("rtrn_udmp_del", rtrn_udmp_del);
// BAKEIN_BREAK m.def("rtrn_udcp_del", rtrn_udcp_del); m.def("rtrn_udcp_del", rtrn_udcp_del);
// BAKEIN_BREAK m.def("pass_udmp_del", pass_udmp_del); // BAKEIN_BREAK m.def("pass_udmp_del", pass_udmp_del);
// BAKEIN_BREAK m.def("pass_udcp_del", pass_udcp_del); // BAKEIN_BREAK m.def("pass_udcp_del", pass_udcp_del);
m.def("rtrn_udmp_del_nd", rtrn_udmp_del_nd); m.def("rtrn_udmp_del_nd", rtrn_udmp_del_nd);
// BAKEIN_BREAK m.def("rtrn_udcp_del_nd", rtrn_udcp_del_nd); m.def("rtrn_udcp_del_nd", rtrn_udcp_del_nd);
// BAKEIN_BREAK m.def("pass_udmp_del_nd", pass_udmp_del_nd); // BAKEIN_BREAK m.def("pass_udmp_del_nd", pass_udmp_del_nd);
// BAKEIN_BREAK m.def("pass_udcp_del_nd", pass_udcp_del_nd); // BAKEIN_BREAK m.def("pass_udcp_del_nd", pass_udcp_del_nd);

View File

@ -29,9 +29,9 @@ def test_atyp_constructors():
(m.rtrn_shmp, "rtrn_shmp"), (m.rtrn_shmp, "rtrn_shmp"),
(m.rtrn_shcp, "rtrn_shcp"), (m.rtrn_shcp, "rtrn_shcp"),
(m.rtrn_uqmp, "rtrn_uqmp"), (m.rtrn_uqmp, "rtrn_uqmp"),
# BAKEIN_BREAK (m.rtrn_uqcp, "rtrn_uqcp"), (m.rtrn_uqcp, "rtrn_uqcp"),
(m.rtrn_udmp, "rtrn_udmp"), (m.rtrn_udmp, "rtrn_udmp"),
# BAKEIN_BREAK (m.rtrn_udcp, "rtrn_udcp"), (m.rtrn_udcp, "rtrn_udcp"),
], ],
) )
def test_cast(rtrn_f, expected): def test_cast(rtrn_f, expected):