MCPcopy Create free account
hub / github.com/Achain-Dev/Achain / luaH_next

Function luaH_next

src/Chain/libraries/glua/ltable.cpp:271–339  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

269
270
271int luaH_next(lua_State *L, Table *t, StkId key) {
272 unsigned int i = findindex_of_sorted_table(L, t, key); /* find original element */
273 if (nullptr == t)
274 return 0;
275 //if (i == 10086) // FIXME: magic number
276 // return 0;
277 for (; i < t->sizearray; i++) { /* try first array part */
278 if (!ttisnil(&t->array[i])) { /* a non-nil value? */
279 setivalue(key, i + 1);
280 setobj2s(L, key + 1, &t->array[i]);
281 return 1;
282 }
283 }
284
285 // TODO�� ��key����Ȼ���ٱ���
286 /*
287 // i��ÿ��luaH_next��ʱ��,findindex�Ľ�������1��ֻ���������Ϊ�ݹ鵽�ڼ�����ʵ�ʷ��ص�i����ʹ��������Ӧ��i
288 std::map<std::string, int, lua_table_less> keys;
289 auto old_i = i;
290 for (i -= t->sizearray; cast_int(i) < sizenode(t); i++) { // hash part
291 auto keynode = gkey(gnode(t, i));
292 if (ttisstring(keynode))
293 {
294
295 auto key_str = std::string(svalue(keynode));
296 keys[key_str] = i;
297 if(key_str == "m")
298 printf("");
299 }
300 else if (ttisinteger(keynode))
301 {
302 auto key_str = std::to_string((lua_Integer) nvalue(keynode));
303 keys[key_str] = i;
304 }
305 else if(ttisnumber(keynode))
306 {
307 auto key_str = std::to_string(nvalue(keynode));
308 keys[key_str] = i;
309 }
310 }
311 i = old_i;
312 int k = i - t->sizearray;
313 int skipped = 0;
314 for(const auto &p : keys)
315 {
316 ++skipped;
317 if (skipped < k)
318 {
319 continue;
320 }
321 auto ki = p.second;
322 if (!ttisnil(gval(gnode(t, ki)))) { // a non-nil value?
323 setobj2s(L, key, gkey(gnode(t, ki)));
324 setobj2s(L, key + 1, gval(gnode(t, ki)));
325 return 1;
326 }
327 }
328 */

Callers 1

lua_nextFunction · 0.85

Calls 1

Tested by

no test coverage detected