diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1999-11-26 16:59:20 -0200 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1999-11-26 16:59:20 -0200 |
commit | d015f1fc02e03864b0ed3ad668a6e0660417a718 (patch) | |
tree | 00b5962e40540bbb8a71bf8665fed256182aa6c7 /lobject.c | |
parent | 790690a2236ab0ad0cce35551c17e62064b4c85b (diff) | |
download | lua-d015f1fc02e03864b0ed3ad668a6e0660417a718.tar.gz lua-d015f1fc02e03864b0ed3ad668a6e0660417a718.tar.bz2 lua-d015f1fc02e03864b0ed3ad668a6e0660417a718.zip |
table sizes don't need to be primes; power of 2 gives the same performance.
Diffstat (limited to 'lobject.c')
-rw-r--r-- | lobject.c | 25 |
1 files changed, 8 insertions, 17 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lobject.c,v 1.24 1999/10/04 17:51:04 roberto Exp roberto $ | 2 | ** $Id: lobject.c,v 1.25 1999/11/22 13:12:07 roberto Exp roberto $ |
3 | ** Some generic functions over Lua objects | 3 | ** Some generic functions over Lua objects |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -22,22 +22,13 @@ const char *const luaO_typenames[] = { /* ORDER LUA_T */ | |||
22 | const TObject luaO_nilobject = {LUA_T_NIL, {NULL}}; | 22 | const TObject luaO_nilobject = {LUA_T_NIL, {NULL}}; |
23 | 23 | ||
24 | 24 | ||
25 | 25 | /* | |
26 | /* hash dimensions values */ | 26 | ** returns smaller power of 2 bigger than `n' (minimum is MINPOWER2) |
27 | static const long dimensions[] = | 27 | */ |
28 | {5L, 11L, 23L, 47L, 97L, 197L, 397L, 797L, 1597L, 3203L, 6421L, | 28 | unsigned long luaO_power2 (unsigned long n) { |
29 | 12853L, 25717L, 51437L, 102811L, 205619L, 411233L, 822433L, | 29 | unsigned long p = MINPOWER2; |
30 | 1644817L, 3289613L, 6579211L, 13158023L, MAX_INT}; | 30 | while (p<=n) p<<=1; |
31 | 31 | return p; | |
32 | |||
33 | int luaO_redimension (lua_State *L, int oldsize) { | ||
34 | int i; | ||
35 | for (i=0; dimensions[i]<MAX_INT; i++) { | ||
36 | if (dimensions[i] > oldsize) | ||
37 | return dimensions[i]; | ||
38 | } | ||
39 | lua_error(L, "tableEM"); | ||
40 | return 0; /* to avoid warnings */ | ||
41 | } | 32 | } |
42 | 33 | ||
43 | 34 | ||