Lines Matching refs:t

50 #define hashpow2(t,n)      (gnode(t, lmod((n), sizenode(t))))  argument
52 #define hashstr(t,str) hashpow2(t, (str)->tsv.hash) argument
53 #define hashboolean(t,p) hashpow2(t, p) argument
60 #define hashmod(t,n) (gnode(t, ((n) % ((sizenode(t)-1)|1)))) argument
63 #define hashpointer(t,p) hashmod(t, IntPoint(p)) argument
84 static Node *hashnum (const Table *t, lua_Number n) { in hashnum() argument
88 return gnode(t, 0); in hashnum()
91 return hashmod(t, a[0]); in hashnum()
100 static Node *mainposition (const Table *t, const TValue *key) { in mainposition() argument
103 return hashnum(t, nvalue(key)); in mainposition()
105 return hashstr(t, rawtsvalue(key)); in mainposition()
107 return hashboolean(t, bvalue(key)); in mainposition()
109 return hashpointer(t, pvalue(key)); in mainposition()
111 return hashpointer(t, gcvalue(key)); in mainposition()
137 static int findindex (lua_State *L, Table *t, StkId key) { in findindex() argument
141 if (0 < i && i <= t->sizearray) /* is `key' inside array part? */ in findindex()
144 Node *n = mainposition(t, key); in findindex()
150 i = cast_int(n - gnode(t, 0)); /* key index in hash table */ in findindex()
152 return i + t->sizearray; in findindex()
162 int luaH_next (lua_State *L, Table *t, StkId key) { in luaH_next() argument
163 int i = findindex(L, t, key); /* find original element */ in luaH_next()
164 for (i++; i < t->sizearray; i++) { /* try first array part */ in luaH_next()
165 if (!ttisnil(&t->array[i])) { /* a non-nil value? */ in luaH_next()
167 setobj2s(L, key+1, &t->array[i]); in luaH_next()
171 for (i -= t->sizearray; i < sizenode(t); i++) { /* then hash part */ in luaH_next()
172 if (!ttisnil(gval(gnode(t, i)))) { /* a non-nil value? */ in luaH_next()
173 setobj2s(L, key, key2tval(gnode(t, i))); in luaH_next()
174 setobj2s(L, key+1, gval(gnode(t, i))); in luaH_next()
222 static int numusearray (const Table *t, int *nums) { in numusearray() argument
230 if (lim > t->sizearray) { in numusearray()
231 lim = t->sizearray; /* adjust upper limit */ in numusearray()
237 if (!ttisnil(&t->array[i-1])) in numusearray()
247 static int numusehash (const Table *t, int *nums, int *pnasize) { in numusehash() argument
250 int i = sizenode(t); in numusehash()
252 Node *n = &t->node[i]; in numusehash()
263 static void setarrayvector (lua_State *L, Table *t, int size) { in setarrayvector() argument
265 luaM_reallocvector(L, t->array, t->sizearray, size, TValue); in setarrayvector()
266 for (i=t->sizearray; i<size; i++) in setarrayvector()
267 setnilvalue(&t->array[i]); in setarrayvector()
268 t->sizearray = size; in setarrayvector()
272 static void setnodevector (lua_State *L, Table *t, int size) { in setnodevector() argument
275 t->node = cast(Node *, dummynode); /* use common `dummynode' */ in setnodevector()
284 t->node = luaM_newvector(L, size, Node); in setnodevector()
286 Node *n = gnode(t, i); in setnodevector()
292 t->lsizenode = cast_byte(lsize); in setnodevector()
293 t->lastfree = gnode(t, size); /* all positions are free */ in setnodevector()
297 static void resize (lua_State *L, Table *t, int nasize, int nhsize) { in resize() argument
299 int oldasize = t->sizearray; in resize()
300 int oldhsize = t->lsizenode; in resize()
301 Node *nold = t->node; /* save old hash ... */ in resize()
303 setarrayvector(L, t, nasize); in resize()
305 setnodevector(L, t, nhsize); in resize()
307 t->sizearray = nasize; in resize()
310 if (!ttisnil(&t->array[i])) in resize()
311 setobjt2t(L, luaH_setnum(L, t, i+1), &t->array[i]); in resize()
314 luaM_reallocvector(L, t->array, oldasize, nasize, TValue); in resize()
320 setobjt2t(L, luaH_set(L, t, key2tval(old)), gval(old)); in resize()
327 void luaH_resizearray (lua_State *L, Table *t, int nasize) { in luaH_resizearray() argument
328 int nsize = (t->node == dummynode) ? 0 : sizenode(t); in luaH_resizearray()
329 resize(L, t, nasize, nsize); in luaH_resizearray()
333 static void rehash (lua_State *L, Table *t, const TValue *ek) { in rehash() argument
339 nasize = numusearray(t, nums); /* count keys in array part */ in rehash()
341 totaluse += numusehash(t, nums, &nasize); /* count keys in hash part */ in rehash()
348 resize(L, t, nasize, totaluse - na); in rehash()
359 Table *t = luaM_new(L, Table); in luaH_new() local
360 luaC_link(L, obj2gco(t), LUA_TTABLE); in luaH_new()
361 t->metatable = NULL; in luaH_new()
362 t->flags = cast_byte(~0); in luaH_new()
364 t->array = NULL; in luaH_new()
365 t->sizearray = 0; in luaH_new()
366 t->lsizenode = 0; in luaH_new()
367 t->node = cast(Node *, dummynode); in luaH_new()
368 setarrayvector(L, t, narray); in luaH_new()
369 setnodevector(L, t, nhash); in luaH_new()
370 return t; in luaH_new()
374 void luaH_free (lua_State *L, Table *t) { in luaH_free() argument
375 if (t->node != dummynode) in luaH_free()
376 luaM_freearray(L, t->node, sizenode(t), Node); in luaH_free()
377 luaM_freearray(L, t->array, t->sizearray, TValue); in luaH_free()
378 luaM_free(L, t); in luaH_free()
382 static Node *getfreepos (Table *t) { in getfreepos() argument
383 while (t->lastfree-- > t->node) { in getfreepos()
384 if (ttisnil(gkey(t->lastfree))) in getfreepos()
385 return t->lastfree; in getfreepos()
399 static TValue *newkey (lua_State *L, Table *t, const TValue *key) { in newkey() argument
400 Node *mp = mainposition(t, key); in newkey()
403 Node *n = getfreepos(t); /* get a free place */ in newkey()
405 rehash(L, t, key); /* grow table */ in newkey()
406 return luaH_set(L, t, key); /* re-insert key into grown table */ in newkey()
409 othern = mainposition(t, key2tval(mp)); in newkey()
426 luaC_barriert(L, t, key); in newkey()
435 const TValue *luaH_getnum (Table *t, int key) { in luaH_getnum() argument
437 if (cast(unsigned int, key-1) < cast(unsigned int, t->sizearray)) in luaH_getnum()
438 return &t->array[key-1]; in luaH_getnum()
441 Node *n = hashnum(t, nk); in luaH_getnum()
455 const TValue *luaH_getstr (Table *t, TString *key) { in luaH_getstr() argument
456 Node *n = hashstr(t, key); in luaH_getstr()
469 const TValue *luaH_get (Table *t, const TValue *key) { in luaH_get() argument
472 case LUA_TSTRING: return luaH_getstr(t, rawtsvalue(key)); in luaH_get()
478 return luaH_getnum(t, k); /* use specialized version */ in luaH_get()
482 Node *n = mainposition(t, key); in luaH_get()
494 TValue *luaH_set (lua_State *L, Table *t, const TValue *key) { in luaH_set() argument
495 const TValue *p = luaH_get(t, key); in luaH_set()
496 t->flags = 0; in luaH_set()
503 return newkey(L, t, key); in luaH_set()
508 TValue *luaH_setnum (lua_State *L, Table *t, int key) { in luaH_setnum() argument
509 const TValue *p = luaH_getnum(t, key); in luaH_setnum()
515 return newkey(L, t, &k); in luaH_setnum()
520 TValue *luaH_setstr (lua_State *L, Table *t, TString *key) { in luaH_setstr() argument
521 const TValue *p = luaH_getstr(t, key); in luaH_setstr()
527 return newkey(L, t, &k); in luaH_setstr()
532 static int unbound_search (Table *t, unsigned int j) { in unbound_search() argument
536 while (!ttisnil(luaH_getnum(t, j))) { in unbound_search()
542 while (!ttisnil(luaH_getnum(t, i))) i++; in unbound_search()
549 if (ttisnil(luaH_getnum(t, m))) j = m; in unbound_search()
560 int luaH_getn (Table *t) { in luaH_getn() argument
561 unsigned int j = t->sizearray; in luaH_getn()
562 if (j > 0 && ttisnil(&t->array[j - 1])) { in luaH_getn()
567 if (ttisnil(&t->array[m - 1])) j = m; in luaH_getn()
573 else if (t->node == dummynode) /* hash part is empty? */ in luaH_getn()
575 else return unbound_search(t, j); in luaH_getn()
582 Node *luaH_mainposition (const Table *t, const TValue *key) { in luaH_mainposition() argument
583 return mainposition(t, key); in luaH_mainposition()