From 4bbb1f4b63c7533029397b0b502c91ffa76badbf Mon Sep 17 00:00:00 2001 From: bubnikv <bubnikv@gmail.com> Date: Tue, 28 Mar 2017 18:02:26 +0200 Subject: [PATCH] Rewrote next_highest_power_of_2 as a template as OSX had issues with the previous implementation. --- xs/src/libslic3r/Utils.hpp | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/xs/src/libslic3r/Utils.hpp b/xs/src/libslic3r/Utils.hpp index 5bbf1b624..0b6b87d28 100644 --- a/xs/src/libslic3r/Utils.hpp +++ b/xs/src/libslic3r/Utils.hpp @@ -8,28 +8,20 @@ extern void trace(unsigned int level, const char *message); // Compute the next highest power of 2 of 32-bit v // http://graphics.stanford.edu/~seander/bithacks.html -inline uint32_t next_highest_power_of_2(uint32_t v) +template<typename T> +inline T next_highest_power_of_2(T v) { if (v != 0) -- v; v |= v >> 1; v |= v >> 2; v |= v >> 4; - v |= v >> 8; - v |= v >> 16; - return ++ v; -} - -inline uint64_t next_highest_power_of_2(uint64_t v) -{ - if (v != 0) - -- v; - v |= v >> 1; - v |= v >> 2; - v |= v >> 4; - v |= v >> 8; - v |= v >> 16; - v |= v >> 32; + if (sizeof(T) >= sizeof(uint16_t)) + v |= v >> 8; + if (sizeof(T) >= sizeof(uint32_t)) + v |= v >> 16; + if (sizeof(T) >= sizeof(uint64_t)) + v |= v >> 32; return ++ v; }