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