diff --git a/src/voxels/voxel.hpp b/src/voxels/voxel.hpp index dcff106f..a54f5015 100644 --- a/src/voxels/voxel.hpp +++ b/src/voxels/voxel.hpp @@ -16,22 +16,34 @@ struct blockstate { uint8_t userbits : 8; // bits for use in block script }; static_assert(sizeof(blockstate) == 2); +static_assert(alignof(blockstate) == 1); +static_assert(sizeof(blockstate) == sizeof(blockstate_t)); /// @brief blockstate cast to an integer (optimized out in most cases) +#ifdef _WIN32 +inline blockstate_t blockstate2int(blockstate b) { + return *reinterpret_cast(&b); +#else inline constexpr blockstate_t blockstate2int(blockstate b) { return static_cast(b.rotation) | static_cast(b.segment) << 3 | static_cast(b.reserved) << 6 | static_cast(b.userbits) << 8; +#endif } /// @brief integer cast to a blockstate (optimized out in most cases) +#ifdef _WIN32 +inline blockstate int2blockstate(blockstate_t i) { + return *reinterpret_cast(&i); +#else inline constexpr blockstate int2blockstate(blockstate_t i) { return { static_cast(i & 0b111), static_cast((i >> 3) & 0b111), static_cast((i >> 6) & 0b11), static_cast((i >> 8) & 0xFF)}; +#endif } struct voxel {