aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>1998-08-10 18:36:32 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>1998-08-10 18:36:32 -0300
commit5378331f2df1ba5bc3a4dc38f7b3ae53c3f2cbef (patch)
treea6812bd7389ac65f84572a4b65e1a767c5b7499a
parent894a2646719006489800ea68b0515ab956f8aa62 (diff)
downloadlua-5378331f2df1ba5bc3a4dc38f7b3ae53c3f2cbef.tar.gz
lua-5378331f2df1ba5bc3a4dc38f7b3ae53c3f2cbef.tar.bz2
lua-5378331f2df1ba5bc3a4dc38f7b3ae53c3f2cbef.zip
hash tables may shrink if use rate is too small.
-rw-r--r--lstring.c10
-rw-r--r--ltable.c10
2 files changed, 6 insertions, 14 deletions
diff --git a/lstring.c b/lstring.c
index 11303877..80103a28 100644
--- a/lstring.c
+++ b/lstring.c
@@ -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
48static int newsize (stringtable *tb) 48static 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
diff --git a/ltable.c b/ltable.c
index 91556b78..ac0c6a94 100644
--- a/ltable.c
+++ b/ltable.c
@@ -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
124static int newsize (Hash *t) 124static 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
140static void rehash (Hash *t) 136static void rehash (Hash *t)