#include #include #include #include int highbit (uint32_t n) { assert (n != 0); int result = 0; if (n & 0xFFFF0000) { result += 16; n >>= 16; } if (n & 0xFF00) { result += 8; n >>= 8; } if (n & 0xF0) { result += 4; n >>= 4; } if (n & 0xC) { result += 2; n >>= 2; } if (n & 0x2) { result += 1; n >>= 1; } return result; } inline uint32_t min (uint32_t a, uint32_t b) { return (a