Make struct packing in example20 MSVC-compliant

This commit is contained in:
Ivan Smirnov 2016-07-18 22:47:40 +01:00
parent b37985ee0c
commit f5f75c6544

View File

@ -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