#ifndef SPROUT_BIT_ROTATE_HPP #define SPROUT_BIT_ROTATE_HPP #include #include #include #include #include namespace sprout { // // left_rotate // template::value>::type = sprout::enabler> inline SPROUT_CONSTEXPR T left_rotate(T x, std::size_t n) { return (x << n) ^ (x >> (sizeof(T) * CHAR_BIT - n)); } // // right_rotate // template::value>::type = sprout::enabler> inline SPROUT_CONSTEXPR T right_rotate(T x, std::size_t n) { return (x >> n) ^ (x << (sizeof(T) * CHAR_BIT - n)); } } // namespace sprout #endif // #ifndef SPROUT_BIT_ROTATE_HPP