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; }