diff src/luan/lib/BasicLib.java @ 44:57054fa43189

implement table lib git-svn-id: https://luan-java.googlecode.com/svn/trunk@45 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Wed, 26 Dec 2012 23:53:25 +0000
parents 80b67b1a653c
children a443637829c1
line wrap: on
line diff
--- a/src/luan/lib/BasicLib.java	Tue Dec 25 03:42:42 2012 +0000
+++ b/src/luan/lib/BasicLib.java	Wed Dec 26 23:53:25 2012 +0000
@@ -121,8 +121,7 @@
 		return lua.call(fn,LuaElement.JAVA,null);
 	}
 
-	public static LuaFunction pairs(LuaTable t) {
-		final Iterator<Map.Entry<Object,Object>> iter = t.iterator();
+	private static LuaFunction pairs(final Iterator<Map.Entry<Object,Object>> iter) {
 		return new LuaFunction() {
 			public Object[] call(LuaState lua,Object[] args) {
 				if( !iter.hasNext() )
@@ -133,15 +132,12 @@
 		};
 	}
 
-	public static LuaFunction ipairs(final LuaTable t) {
-		return new LuaFunction() {
-			private double i = 0.0;
-			public Object[] call(LuaState lua,Object[] args) {
-				LuaNumber n = new LuaNumber(++i);
-				Object val = t.get(n);
-				return val==null ? LuaFunction.EMPTY_RTN : new Object[]{n,val};
-			}
-		};
+	public static LuaFunction pairs(LuaTable t) {
+		return pairs( t.iterator() );
+	}
+
+	public static LuaFunction ipairs(LuaTable t) {
+		return pairs( t.listIterator() );
 	}
 
 	public static LuaTable get_metatable(LuaState lua,Object obj) {