使用されているハッシュの数
昨日の話の続き
http://d.hatena.ne.jp/tkuro/20100401/1270159580
また、{}でないテーブルのエントリを消して {}になった場合、確保されているエントリ数は変わらないので 0 にならない、という問題点が。。。(まずい?)
ちゃんと見てみたら numusehash() というのがあったりした。
と言うわけで
diff --git a/src/ltable.c b/src/ltable.c index ec84f4f..d313bcf 100644 --- a/src/ltable.c +++ b/src/ltable.c @@ -575,6 +575,12 @@ int luaH_getn (Table *t) { else return unbound_search(t, j); } +int luaH_gethn (Table *t) { + int nums[MAXBITS+1]; /* nums[i] = number of keys between 2^(i-1) and 2^i */ + int dummy; + + return t->node == dummynode? 0: numusehash(t, nums, &dummy); +} #if defined(LUA_DEBUG)
どうもこんだけで、
> p = {a = 2} > print(+p) 1 > p.a = nil > print(+p) 0
いけるらしい。