mirror of
https://github.com/pybind/pybind11.git
synced 2026-04-19 22:39:09 +00:00
Fully-automatic clang-format with include reordering (#3713)
* chore: add clang-format
* Removing check-style (Classic check-style)
Ported from @henryiii's 53056b1b0e
* Automatic clang-format changes (NO manual changes).
Co-authored-by: Henry Schreiner <henryschreineriii@gmail.com>
This commit is contained in:
committed by
GitHub
parent
e96221beff
commit
ec24786eab
@@ -8,21 +8,23 @@
|
||||
BSD-style license that can be found in the LICENSE file.
|
||||
*/
|
||||
|
||||
#if defined(_MSC_VER) && _MSC_VER < 1910 // VS 2015's MSVC
|
||||
# pragma warning(disable: 4702) // unreachable code in system header (xatomic.h(382))
|
||||
#if defined(_MSC_VER) && _MSC_VER < 1910 // VS 2015's MSVC
|
||||
# pragma warning(disable : 4702) // unreachable code in system header (xatomic.h(382))
|
||||
#endif
|
||||
|
||||
#include "pybind11_tests.h"
|
||||
#include "object.h"
|
||||
#include "pybind11_tests.h"
|
||||
|
||||
namespace {
|
||||
|
||||
// This is just a wrapper around unique_ptr, but with extra fields to deliberately bloat up the
|
||||
// holder size to trigger the non-simple-layout internal instance layout for single inheritance with
|
||||
// large holder type:
|
||||
template <typename T> class huge_unique_ptr {
|
||||
// holder size to trigger the non-simple-layout internal instance layout for single inheritance
|
||||
// with large holder type:
|
||||
template <typename T>
|
||||
class huge_unique_ptr {
|
||||
std::unique_ptr<T> ptr;
|
||||
uint64_t padding[10];
|
||||
|
||||
public:
|
||||
explicit huge_unique_ptr(T *p) : ptr(p) {}
|
||||
T *get() { return ptr.get(); }
|
||||
@@ -32,10 +34,11 @@ public:
|
||||
template <typename T>
|
||||
class custom_unique_ptr {
|
||||
std::unique_ptr<T> impl;
|
||||
|
||||
public:
|
||||
explicit custom_unique_ptr(T *p) : impl(p) {}
|
||||
T* get() const { return impl.get(); }
|
||||
T* release_ptr() { return impl.release(); }
|
||||
T *get() const { return impl.get(); }
|
||||
T *release_ptr() { return impl.release(); }
|
||||
};
|
||||
|
||||
// Simple custom holder that works like shared_ptr and has operator& overload
|
||||
@@ -44,11 +47,12 @@ public:
|
||||
template <typename T>
|
||||
class shared_ptr_with_addressof_operator {
|
||||
std::shared_ptr<T> impl;
|
||||
|
||||
public:
|
||||
shared_ptr_with_addressof_operator( ) = default;
|
||||
shared_ptr_with_addressof_operator() = default;
|
||||
explicit shared_ptr_with_addressof_operator(T *p) : impl(p) {}
|
||||
T* get() const { return impl.get(); }
|
||||
T** operator&() { throw std::logic_error("Call of overloaded operator& is not expected"); }
|
||||
T *get() const { return impl.get(); }
|
||||
T **operator&() { throw std::logic_error("Call of overloaded operator& is not expected"); }
|
||||
};
|
||||
|
||||
// Simple custom holder that works like unique_ptr and has operator& overload
|
||||
@@ -57,12 +61,13 @@ public:
|
||||
template <typename T>
|
||||
class unique_ptr_with_addressof_operator {
|
||||
std::unique_ptr<T> impl;
|
||||
|
||||
public:
|
||||
unique_ptr_with_addressof_operator() = default;
|
||||
explicit unique_ptr_with_addressof_operator(T *p) : impl(p) {}
|
||||
T* get() const { return impl.get(); }
|
||||
T* release_ptr() { return impl.release(); }
|
||||
T** operator&() { throw std::logic_error("Call of overloaded operator& is not expected"); }
|
||||
T *get() const { return impl.get(); }
|
||||
T *release_ptr() { return impl.release(); }
|
||||
T **operator&() { throw std::logic_error("Call of overloaded operator& is not expected"); }
|
||||
};
|
||||
|
||||
// Custom object with builtin reference counting (see 'object.h' for the implementation)
|
||||
@@ -70,8 +75,10 @@ class MyObject1 : public Object {
|
||||
public:
|
||||
explicit MyObject1(int value) : value(value) { print_created(this, toString()); }
|
||||
std::string toString() const override { return "MyObject1[" + std::to_string(value) + "]"; }
|
||||
|
||||
protected:
|
||||
~MyObject1() override { print_destroyed(this); }
|
||||
|
||||
private:
|
||||
int value;
|
||||
};
|
||||
@@ -83,6 +90,7 @@ public:
|
||||
explicit MyObject2(int value) : value(value) { print_created(this, toString()); }
|
||||
std::string toString() const { return "MyObject2[" + std::to_string(value) + "]"; }
|
||||
virtual ~MyObject2() { print_destroyed(this); }
|
||||
|
||||
private:
|
||||
int value;
|
||||
};
|
||||
@@ -94,6 +102,7 @@ public:
|
||||
explicit MyObject3(int value) : value(value) { print_created(this, toString()); }
|
||||
std::string toString() const { return "MyObject3[" + std::to_string(value) + "]"; }
|
||||
virtual ~MyObject3() { print_destroyed(this); }
|
||||
|
||||
private:
|
||||
int value;
|
||||
};
|
||||
@@ -117,6 +126,7 @@ public:
|
||||
delete o;
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
~MyObject4() {
|
||||
myobject4_instances.erase(this);
|
||||
@@ -144,6 +154,7 @@ public:
|
||||
delete o;
|
||||
}
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual ~MyObject4a() {
|
||||
myobject4a_instances.erase(this);
|
||||
@@ -232,14 +243,14 @@ struct TypeForMoveOnlyHolderWithAddressOf {
|
||||
};
|
||||
|
||||
// test_smart_ptr_from_default
|
||||
struct HeldByDefaultHolder { };
|
||||
struct HeldByDefaultHolder {};
|
||||
|
||||
// test_shared_ptr_gc
|
||||
// #187: issue involving std::shared_ptr<> return value policy & garbage collection
|
||||
struct ElementBase {
|
||||
virtual ~ElementBase() = default; /* Force creation of virtual table */
|
||||
ElementBase() = default;
|
||||
ElementBase(const ElementBase&) = delete;
|
||||
ElementBase(const ElementBase &) = delete;
|
||||
};
|
||||
|
||||
struct ElementA : ElementBase {
|
||||
@@ -259,11 +270,12 @@ struct ElementList {
|
||||
// It is always possible to construct a ref<T> from an Object* pointer without
|
||||
// possible inconsistencies, hence the 'true' argument at the end.
|
||||
// Make pybind11 aware of the non-standard getter member function
|
||||
namespace pybind11 { namespace detail {
|
||||
template <typename T>
|
||||
struct holder_helper<ref<T>> {
|
||||
static const T *get(const ref<T> &p) { return p.get_ptr(); }
|
||||
};
|
||||
namespace pybind11 {
|
||||
namespace detail {
|
||||
template <typename T>
|
||||
struct holder_helper<ref<T>> {
|
||||
static const T *get(const ref<T> &p) { return p.get_ptr(); }
|
||||
};
|
||||
} // namespace detail
|
||||
} // namespace pybind11
|
||||
|
||||
@@ -287,8 +299,7 @@ TEST_SUBMODULE(smart_ptr, m) {
|
||||
py::class_<Object, ref<Object>> obj(m, "Object");
|
||||
obj.def("getRefCount", &Object::getRefCount);
|
||||
|
||||
py::class_<MyObject1, ref<MyObject1>>(m, "MyObject1", obj)
|
||||
.def(py::init<int>());
|
||||
py::class_<MyObject1, ref<MyObject1>>(m, "MyObject1", obj).def(py::init<int>());
|
||||
py::implicitly_convertible<py::int_, MyObject1>();
|
||||
|
||||
m.def("make_object_1", []() -> Object * { return new MyObject1(1); });
|
||||
@@ -307,25 +318,27 @@ TEST_SUBMODULE(smart_ptr, m) {
|
||||
// Expose constructor stats for the ref type
|
||||
m.def("cstats_ref", &ConstructorStats::get<ref_tag>);
|
||||
|
||||
py::class_<MyObject2, std::shared_ptr<MyObject2>>(m, "MyObject2")
|
||||
.def(py::init<int>());
|
||||
py::class_<MyObject2, std::shared_ptr<MyObject2>>(m, "MyObject2").def(py::init<int>());
|
||||
m.def("make_myobject2_1", []() { return new MyObject2(6); });
|
||||
m.def("make_myobject2_2", []() { return std::make_shared<MyObject2>(7); });
|
||||
m.def("print_myobject2_1", [](const MyObject2 *obj) { py::print(obj->toString()); });
|
||||
// NOLINTNEXTLINE(performance-unnecessary-value-param)
|
||||
m.def("print_myobject2_2", [](std::shared_ptr<MyObject2> obj) { py::print(obj->toString()); });
|
||||
m.def("print_myobject2_3", [](const std::shared_ptr<MyObject2> &obj) { py::print(obj->toString()); });
|
||||
m.def("print_myobject2_4", [](const std::shared_ptr<MyObject2> *obj) { py::print((*obj)->toString()); });
|
||||
m.def("print_myobject2_3",
|
||||
[](const std::shared_ptr<MyObject2> &obj) { py::print(obj->toString()); });
|
||||
m.def("print_myobject2_4",
|
||||
[](const std::shared_ptr<MyObject2> *obj) { py::print((*obj)->toString()); });
|
||||
|
||||
py::class_<MyObject3, std::shared_ptr<MyObject3>>(m, "MyObject3")
|
||||
.def(py::init<int>());
|
||||
py::class_<MyObject3, std::shared_ptr<MyObject3>>(m, "MyObject3").def(py::init<int>());
|
||||
m.def("make_myobject3_1", []() { return new MyObject3(8); });
|
||||
m.def("make_myobject3_2", []() { return std::make_shared<MyObject3>(9); });
|
||||
m.def("print_myobject3_1", [](const MyObject3 *obj) { py::print(obj->toString()); });
|
||||
// NOLINTNEXTLINE(performance-unnecessary-value-param)
|
||||
m.def("print_myobject3_2", [](std::shared_ptr<MyObject3> obj) { py::print(obj->toString()); });
|
||||
m.def("print_myobject3_3", [](const std::shared_ptr<MyObject3> &obj) { py::print(obj->toString()); });
|
||||
m.def("print_myobject3_4", [](const std::shared_ptr<MyObject3> *obj) { py::print((*obj)->toString()); });
|
||||
m.def("print_myobject3_3",
|
||||
[](const std::shared_ptr<MyObject3> &obj) { py::print(obj->toString()); });
|
||||
m.def("print_myobject3_4",
|
||||
[](const std::shared_ptr<MyObject3> *obj) { py::print((*obj)->toString()); });
|
||||
|
||||
// test_smart_ptr_refcounting
|
||||
m.def("test_object1_refcounting", []() {
|
||||
@@ -421,11 +434,18 @@ TEST_SUBMODULE(smart_ptr, m) {
|
||||
[](const HolderWithAddressOf *obj) { py::print((*obj).get()->toString()); });
|
||||
|
||||
// test_move_only_holder_with_addressof_operator
|
||||
using MoveOnlyHolderWithAddressOf = unique_ptr_with_addressof_operator<TypeForMoveOnlyHolderWithAddressOf>;
|
||||
py::class_<TypeForMoveOnlyHolderWithAddressOf, MoveOnlyHolderWithAddressOf>(m, "TypeForMoveOnlyHolderWithAddressOf")
|
||||
.def_static("make", []() { return MoveOnlyHolderWithAddressOf(new TypeForMoveOnlyHolderWithAddressOf(0)); })
|
||||
using MoveOnlyHolderWithAddressOf
|
||||
= unique_ptr_with_addressof_operator<TypeForMoveOnlyHolderWithAddressOf>;
|
||||
py::class_<TypeForMoveOnlyHolderWithAddressOf, MoveOnlyHolderWithAddressOf>(
|
||||
m, "TypeForMoveOnlyHolderWithAddressOf")
|
||||
.def_static("make",
|
||||
[]() {
|
||||
return MoveOnlyHolderWithAddressOf(
|
||||
new TypeForMoveOnlyHolderWithAddressOf(0));
|
||||
})
|
||||
.def_readwrite("value", &TypeForMoveOnlyHolderWithAddressOf::value)
|
||||
.def("print_object", [](const TypeForMoveOnlyHolderWithAddressOf *obj) { py::print(obj->toString()); });
|
||||
.def("print_object",
|
||||
[](const TypeForMoveOnlyHolderWithAddressOf *obj) { py::print(obj->toString()); });
|
||||
|
||||
// test_smart_ptr_from_default
|
||||
py::class_<HeldByDefaultHolder, std::unique_ptr<HeldByDefaultHolder>>(m, "HeldByDefaultHolder")
|
||||
|
||||
Reference in New Issue
Block a user