forked from LeenkxTeam/LNXSDK
36 lines
938 B
Haxe
36 lines
938 B
Haxe
package kha.audio2.ogg.tools;
|
|
|
|
/**
|
|
* ...
|
|
* @author shohei909
|
|
*/
|
|
class MathTools
|
|
{
|
|
public static inline function ilog(n:Int)
|
|
{
|
|
var log2_4 = [0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4];
|
|
|
|
// 2 compares if n < 16, 3 compares otherwise (4 if signed or n > 1<<29)
|
|
return if (n < (1 << 14)) {
|
|
if (n < (1 << 4)) {
|
|
0 + log2_4[n];
|
|
} else if (n < (1 << 9)) {
|
|
5 + log2_4[n >> 5];
|
|
} else {
|
|
10 + log2_4[n >> 10];
|
|
}
|
|
} else if (n < (1 << 24)) {
|
|
if (n < (1 << 19)) {
|
|
15 + log2_4[n >> 15];
|
|
} else {
|
|
20 + log2_4[n >> 20];
|
|
}
|
|
} else if (n < (1 << 29)) {
|
|
25 + log2_4[n >> 25];
|
|
} else if (n < (1 << 31)) {
|
|
30 + log2_4[n >> 30];
|
|
} else {
|
|
0; // signed n returns 0
|
|
}
|
|
}
|
|
} |