From f266c0079b1111d98ad5e39a6967c00621b50999 Mon Sep 17 00:00:00 2001 From: James Roseborough Date: Fri, 13 Aug 2010 21:03:05 +0000 Subject: [PATCH] Improve ipairs() implementation. --- src/core/org/luaj/vm2/LuaTable.java | 19 ++++++++----------- src/core/org/luaj/vm2/WeakTable.java | 11 ----------- 2 files changed, 8 insertions(+), 22 deletions(-) diff --git a/src/core/org/luaj/vm2/LuaTable.java b/src/core/org/luaj/vm2/LuaTable.java index cedfe5a3..4cba8c33 100644 --- a/src/core/org/luaj/vm2/LuaTable.java +++ b/src/core/org/luaj/vm2/LuaTable.java @@ -354,13 +354,12 @@ public class LuaTable extends LuaValue { /** * Get the next element after a particular key in the * contiguous array part of a table - * @return key,value or nil + * @return key,value or none */ public Varargs inext(LuaValue key) { - int i = key.optint(0); - return i<0 || i>=array.length || array[i]==null? - NIL: - varargsOf(LuaInteger.valueOf(i+1),array[i]); + int k = key.checkint() + 1; + LuaValue v = rawget(k); + return v.isnil()? NONE: varargsOf(LuaInteger.valueOf(k),v); } /** @@ -385,12 +384,10 @@ public class LuaTable extends LuaValue { * @param func */ public LuaValue foreachi(LuaValue func) { - Varargs n; - LuaValue k = NIL; - LuaValue v; - while ( !(k = ((n = inext(k)).arg1())).isnil() ) - if ( ! (v = func.call(k, n.arg(2))).isnil() ) - return v; + LuaValue v,r; + for ( int k=0; !(v = rawget(++k)).isnil(); ) + if ( ! (r = func.call(valueOf(k), v)).isnil() ) + return r; return NIL; } diff --git a/src/core/org/luaj/vm2/WeakTable.java b/src/core/org/luaj/vm2/WeakTable.java index 04bda9f3..ed22e510 100644 --- a/src/core/org/luaj/vm2/WeakTable.java +++ b/src/core/org/luaj/vm2/WeakTable.java @@ -170,17 +170,6 @@ public class WeakTable extends LuaTable { } } - /** - * Get the next element after a particular key in the - * contiguous array part of a table - * @return key,value or nil - */ - public Varargs inext(LuaValue key) { - int k = key.optint(0)+1; - LuaValue v = this.rawget(k); - return v.isnil()? NIL: varargsOf(valueOf(k),v); - } - // ----------------- sort support ----------------------------- public void sort(final LuaValue comparator) { super.sort( new TwoArgFunction() {