mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-23 05:35:13 +00:00
Make struct packing in example20 MSVC-compliant
This commit is contained in:
parent
b37985ee0c
commit
f5f75c6544
@ -13,6 +13,12 @@
|
|||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#define PYBIND11_PACKED(cls) cls __attribute__((__packed__))
|
||||||
|
#else
|
||||||
|
#define PYBIND11_PACKED(cls) __pragma(pack(push, 1)) cls __pragma(pack(pop))
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace py = pybind11;
|
namespace py = pybind11;
|
||||||
|
|
||||||
struct SimpleStruct {
|
struct SimpleStruct {
|
||||||
@ -25,20 +31,20 @@ std::ostream& operator<<(std::ostream& os, const SimpleStruct& v) {
|
|||||||
return os << "s:" << v.x << "," << v.y << "," << v.z;
|
return os << "s:" << v.x << "," << v.y << "," << v.z;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct PackedStruct {
|
PYBIND11_PACKED(struct PackedStruct {
|
||||||
bool x;
|
bool x;
|
||||||
uint32_t y;
|
uint32_t y;
|
||||||
float z;
|
float z;
|
||||||
} __attribute__((packed));
|
});
|
||||||
|
|
||||||
std::ostream& operator<<(std::ostream& os, const PackedStruct& v) {
|
std::ostream& operator<<(std::ostream& os, const PackedStruct& v) {
|
||||||
return os << "p:" << v.x << "," << v.y << "," << v.z;
|
return os << "p:" << v.x << "," << v.y << "," << v.z;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct NestedStruct {
|
PYBIND11_PACKED(struct NestedStruct {
|
||||||
SimpleStruct a;
|
SimpleStruct a;
|
||||||
PackedStruct b;
|
PackedStruct b;
|
||||||
} __attribute__((packed));
|
});
|
||||||
|
|
||||||
std::ostream& operator<<(std::ostream& os, const NestedStruct& v) {
|
std::ostream& operator<<(std::ostream& os, const NestedStruct& v) {
|
||||||
return os << "n:a=" << v.a << ";b=" << v.b;
|
return os << "n:a=" << v.a << ";b=" << v.b;
|
||||||
@ -148,3 +154,5 @@ void init_ex20(py::module &m) {
|
|||||||
m.def("print_dtypes", &print_dtypes);
|
m.def("print_dtypes", &print_dtypes);
|
||||||
m.def("get_format_unbound", &get_format_unbound);
|
m.def("get_format_unbound", &get_format_unbound);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#undef PYBIND11_PACKED
|
||||||
|
Loading…
Reference in New Issue
Block a user