|
@@ -1,5 +1,5 @@
|
|
|
/*
|
|
|
-** $Id: lobject.c,v 1.96 2003/02/18 16:02:56 roberto Exp roberto $
|
|
|
+** $Id: lobject.c,v 1.97 2003/04/03 13:35:34 roberto Exp roberto $
|
|
|
** Some generic functions over Lua objects
|
|
|
** See Copyright Notice in lua.h
|
|
|
*/
|
|
@@ -45,29 +45,20 @@ int luaO_int2fb (unsigned int x) {
|
|
|
|
|
|
|
|
|
int luaO_log2 (unsigned int x) {
|
|
|
- static const lu_byte log_8[255] = {
|
|
|
- 0,
|
|
|
- 1,1,
|
|
|
- 2,2,2,2,
|
|
|
- 3,3,3,3,3,3,3,3,
|
|
|
- 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
|
|
|
- 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
|
|
|
+ static const lu_byte log_2[256] = {
|
|
|
+ 0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
|
|
|
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
|
|
|
- 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
|
|
|
- 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
|
|
|
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
|
|
|
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
|
|
|
- 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
|
|
|
+ 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
|
|
|
+ 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
|
|
|
+ 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
|
|
|
+ 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8
|
|
|
};
|
|
|
- if (x >= 0x00010000) {
|
|
|
- if (x >= 0x01000000) return log_8[((x>>24) & 0xff) - 1]+24;
|
|
|
- else return log_8[((x>>16) & 0xff) - 1]+16;
|
|
|
- }
|
|
|
- else {
|
|
|
- if (x >= 0x00000100) return log_8[((x>>8) & 0xff) - 1]+8;
|
|
|
- else if (x) return log_8[(x & 0xff) - 1];
|
|
|
- return -1; /* special `log' for 0 */
|
|
|
- }
|
|
|
+ int l = -1;
|
|
|
+ while (x >= 256) { l += 8; x >>= 8; }
|
|
|
+ return l + log_2[x];
|
|
|
+
|
|
|
}
|
|
|
|
|
|
|