diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1998-08-10 18:36:32 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1998-08-10 18:36:32 -0300 |
commit | 5378331f2df1ba5bc3a4dc38f7b3ae53c3f2cbef (patch) | |
tree | a6812bd7389ac65f84572a4b65e1a767c5b7499a | |
parent | 894a2646719006489800ea68b0515ab956f8aa62 (diff) | |
download | lua-5378331f2df1ba5bc3a4dc38f7b3ae53c3f2cbef.tar.gz lua-5378331f2df1ba5bc3a4dc38f7b3ae53c3f2cbef.tar.bz2 lua-5378331f2df1ba5bc3a4dc38f7b3ae53c3f2cbef.zip |
hash tables may shrink if use rate is too small.
-rw-r--r-- | lstring.c | 10 | ||||
-rw-r--r-- | ltable.c | 10 |
2 files changed, 6 insertions, 14 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lstring.c,v 1.13 1998/06/19 16:14:09 roberto Exp roberto $ | 2 | ** $Id: lstring.c,v 1.14 1998/07/27 17:06:17 roberto Exp roberto $ |
3 | ** String table (keeps all strings handled by Lua) | 3 | ** String table (keeps all strings handled by Lua) |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -45,8 +45,7 @@ static unsigned long hash_s (char *s, long l) | |||
45 | return h; | 45 | return h; |
46 | } | 46 | } |
47 | 47 | ||
48 | static int newsize (stringtable *tb) | 48 | static int newsize (stringtable *tb) { |
49 | { | ||
50 | int size = tb->size; | 49 | int size = tb->size; |
51 | int realuse = 0; | 50 | int realuse = 0; |
52 | int i; | 51 | int i; |
@@ -54,10 +53,7 @@ static int newsize (stringtable *tb) | |||
54 | for (i=0; i<size; i++) | 53 | for (i=0; i<size; i++) |
55 | if (tb->hash[i] != NULL && tb->hash[i] != &EMPTY) | 54 | if (tb->hash[i] != NULL && tb->hash[i] != &EMPTY) |
56 | realuse++; | 55 | realuse++; |
57 | if (2*(realuse+1) <= size) /* +1 is the new element */ | 56 | return luaO_redimension((realuse+1)*2); /* +1 is the new element */ |
58 | return size; /* don't need to grow, just rehash to clear EMPTYs */ | ||
59 | else | ||
60 | return luaO_redimension(size); | ||
61 | } | 57 | } |
62 | 58 | ||
63 | 59 | ||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: ltable.c,v 1.12 1998/01/28 16:50:33 roberto Exp roberto $ | 2 | ** $Id: ltable.c,v 1.13 1998/07/12 16:15:19 roberto Exp roberto $ |
3 | ** Lua tables (hash) | 3 | ** Lua tables (hash) |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -121,8 +121,7 @@ Hash *luaH_new (int nhash) | |||
121 | } | 121 | } |
122 | 122 | ||
123 | 123 | ||
124 | static int newsize (Hash *t) | 124 | static int newsize (Hash *t) { |
125 | { | ||
126 | Node *v = t->node; | 125 | Node *v = t->node; |
127 | int size = nhash(t); | 126 | int size = nhash(t); |
128 | int realuse = 0; | 127 | int realuse = 0; |
@@ -131,10 +130,7 @@ static int newsize (Hash *t) | |||
131 | if (ttype(ref(v+i)) != LUA_T_NIL && ttype(val(v+i)) != LUA_T_NIL) | 130 | if (ttype(ref(v+i)) != LUA_T_NIL && ttype(val(v+i)) != LUA_T_NIL) |
132 | realuse++; | 131 | realuse++; |
133 | } | 132 | } |
134 | if (2*(realuse+1) <= size) /* +1 is the new element */ | 133 | return luaO_redimension((realuse+1)*2); /* +1 is the new element */ |
135 | return size; /* don't need to grow, just rehash */ | ||
136 | else | ||
137 | return luaO_redimension(size); | ||
138 | } | 134 | } |
139 | 135 | ||
140 | static void rehash (Hash *t) | 136 | static void rehash (Hash *t) |