From 2d463aa3b69b2aeabae7b53a3d3a59bc3d3be3af Mon Sep 17 00:00:00 2001 From: "Ralf W. Grosse-Kunstleve" Date: Sat, 23 Jan 2021 23:25:19 -0800 Subject: [PATCH] Purging obsolete pybind11/vptr_holder.h and associated test. --- include/pybind11/vptr_holder.h | 77 ---------------------------- tests/test_variant_unique_shared.cpp | 54 ------------------- tests/test_variant_unique_shared.py | 61 ---------------------- 3 files changed, 192 deletions(-) delete mode 100644 include/pybind11/vptr_holder.h delete mode 100644 tests/test_variant_unique_shared.cpp delete mode 100644 tests/test_variant_unique_shared.py diff --git a/include/pybind11/vptr_holder.h b/include/pybind11/vptr_holder.h deleted file mode 100644 index 1de37adc8..000000000 --- a/include/pybind11/vptr_holder.h +++ /dev/null @@ -1,77 +0,0 @@ -#pragma once - -#include - -#include -#include -#include - -PYBIND11_NAMESPACE_BEGIN(PYBIND11_NAMESPACE) - -// Could this be a holder for a `class_`-like `vclass`? -// To enable passing of unique_ptr as in pure C++. -template class vptr { - public: - explicit vptr(T *ptr = nullptr) : vptr_{std::unique_ptr(ptr)} { - std::cout << std::endl << "explicit vptr(T *ptr = nullptr)" << std::endl; - //TRIGGER_SEGSEV - } - explicit vptr(std::unique_ptr u) : vptr_{std::move(u)} { std::cout << std::endl << "explicit vptr(std::unique_ptr u)" << std::endl; } - explicit vptr(std::shared_ptr s) : vptr_{s} { std::cout << std::endl << "explicit vptr(std::shared_ptr s)" << std::endl; } - - int ownership_type() const { - if (std::get_if<0>(&vptr_)) { - return 0; - } - if (std::get_if<1>(&vptr_)) { - return 1; - } - return -1; - } - - T *get() { - std::cout << std::endl << "vptr::get" << std::endl; - auto u = std::get_if<0>(&vptr_); - if (u) { - return u->get(); - } - auto s = std::get_if<1>(&vptr_); - if (s) { - return s->get(); - } - return nullptr; - } - - std::unique_ptr get_unique() { - auto u = std::get_if<0>(&vptr_); - if (u) { - return std::move(*u); - } - throw std::runtime_error("get_unique failure."); - } - - std::shared_ptr get_shared() { - auto s = std::get_if<1>(&vptr_); - if (s) { - return *s; - } - auto u = std::get_if<0>(&vptr_); - if (u) { - auto result = std::shared_ptr(std::move(*u)); - vptr_ = result; - return result; - } - throw std::runtime_error("get_shared failure."); - } - - private: - std::variant, std::shared_ptr> vptr_; -}; - -template class vptr_holder : public vptr { - using vptr::vptr; // GET_STACK -1 -}; - -PYBIND11_NAMESPACE_END(PYBIND11_NAMESPACE) - -PYBIND11_DECLARE_HOLDER_TYPE(T, pybind11::vptr_holder); diff --git a/tests/test_variant_unique_shared.cpp b/tests/test_variant_unique_shared.cpp deleted file mode 100644 index 9f083dafb..000000000 --- a/tests/test_variant_unique_shared.cpp +++ /dev/null @@ -1,54 +0,0 @@ -#include "pybind11_tests.h" - -#include - -#include -#include - -namespace pybind11_tests { - -using pybind11::vptr; - -vptr from_raw() { return vptr{new double{3}}; } - -vptr from_unique() { - return vptr{std::unique_ptr(new double{5})}; -} - -vptr from_shared() { - return vptr{std::shared_ptr(new double{7})}; -} - -TEST_SUBMODULE(variant_unique_shared, m) { - - m.def("from_raw", from_raw); - m.def("from_unique", from_unique); - m.def("from_shared", from_shared); - - py::class_>(m, "vptr_double") - .def(py::init<>()) - .def("ownership_type", &vptr::ownership_type) - .def("get_value", - [](vptr &v) { - auto p = v.get(); - if (p) - return *p; - return -1.; - }) - .def("get_unique", - [](vptr &v) { - v.get_unique(); - return; - }) - .def("get_shared", - [](vptr &v) { - v.get_shared(); - return; - }) - .def("disown_unique", [](vptr &v) { - v.get_unique().reset(); - return; - }); -} - -} // namespace pybind11_tests diff --git a/tests/test_variant_unique_shared.py b/tests/test_variant_unique_shared.py deleted file mode 100644 index 2ef0e40a7..000000000 --- a/tests/test_variant_unique_shared.py +++ /dev/null @@ -1,61 +0,0 @@ -# -*- coding: utf-8 -*- -import pytest - -from pybind11_tests import variant_unique_shared as m - - -def test_default_constructed(): - v = m.vptr_double() - assert v.ownership_type() == 0 - assert v.get_value() == -1 - - -def test_from_raw(): - v = m.from_raw() - assert v.ownership_type() == 0 - assert v.get_value() == 3 - - -def test_from_unique(): - v = m.from_unique() - assert v.ownership_type() == 0 - assert v.get_value() == 5 - - -def test_from_shared(): - v = m.from_shared() - assert v.ownership_type() == 1 - assert v.get_value() == 7 - - -def test_promotion_to_shared(): - v = m.from_raw() - v.get_unique() - assert v.ownership_type() == 0 - v.get_shared() # Promotion to shared_ptr. - assert v.ownership_type() == 1 - v.get_shared() # Existing shared_ptr. - with pytest.raises(RuntimeError) as exc_info: - v.get_unique() - assert str(exc_info.value) == "get_unique failure." - v.get_shared() # Still works. - - -def test_shared_from_birth(): - v = m.from_shared() - assert v.ownership_type() == 1 - with pytest.raises(RuntimeError) as exc_info: - v.get_unique() - assert str(exc_info.value) == "get_unique failure." - v.get_shared() # Still works. - - -def test_promotion_of_disowned_to_shared(): - v = m.from_unique() - assert v.get_value() == 5 - v.disown_unique() - assert v.ownership_type() == 0 - assert v.get_value() == -1 - v.get_shared() # Promotion of disowned to shared_ptr. - assert v.ownership_type() == 1 - assert v.get_value() == -1