| 359 | |
| 360 | |
| 361 | int luaH_next (lua_State *L, Table *t, StkId key) { |
| 362 | unsigned int asize = t->asize; |
| 363 | unsigned int i = findindex(L, t, s2v(key), asize); /* find original key */ |
| 364 | for (; i < asize; i++) { /* try first array part */ |
| 365 | lu_byte tag = *getArrTag(t, i); |
| 366 | if (!tagisempty(tag)) { /* a non-empty entry? */ |
| 367 | setivalue(s2v(key), cast_int(i) + 1); |
| 368 | farr2val(t, i, tag, s2v(key + 1)); |
| 369 | return 1; |
| 370 | } |
| 371 | } |
| 372 | for (i -= asize; i < sizenode(t); i++) { /* hash part */ |
| 373 | if (!isempty(gval(gnode(t, i)))) { /* a non-empty entry? */ |
| 374 | Node *n = gnode(t, i); |
| 375 | getnodekey(L, s2v(key), n); |
| 376 | setobj2s(L, key + 1, gval(n)); |
| 377 | return 1; |
| 378 | } |
| 379 | } |
| 380 | return 0; /* no more elements */ |
| 381 | } |
| 382 | |
| 383 | |
| 384 | /* Extra space in Node array if it has a lastfree entry */ |