Mercurial Hosting > luan
diff src/luan/lib/BasicLib.java @ 43:80b67b1a653c
implement string lib
git-svn-id: https://luan-java.googlecode.com/svn/trunk@44 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Tue, 25 Dec 2012 03:42:42 +0000 |
parents | 786699c78837 |
children | 57054fa43189 |
line wrap: on
line diff
--- a/src/luan/lib/BasicLib.java Sun Dec 23 06:36:56 2012 +0000 +++ b/src/luan/lib/BasicLib.java Tue Dec 25 03:42:42 2012 +0000 @@ -121,66 +121,27 @@ return lua.call(fn,LuaElement.JAVA,null); } - private static class TableIter { - private final Iterator<Map.Entry<Object,Object>> iter; - - TableIter(Iterator<Map.Entry<Object,Object>> iter) { - this.iter = iter; - } - - public Object[] next() { - if( !iter.hasNext() ) - return LuaFunction.EMPTY_RTN; - Map.Entry<Object,Object> entry = iter.next(); - return new Object[]{entry.getKey(),entry.getValue()}; - } - } - private static final Method nextTableIter; - static { - try { - nextTableIter = TableIter.class.getMethod("next"); - nextTableIter.setAccessible(true); - } catch(NoSuchMethodException e) { - throw new RuntimeException(e); - } - } - - static LuaFunction pairs(Iterator<Map.Entry<Object,Object>> iter) { - TableIter ti = new TableIter(iter); - return new LuaJavaFunction(nextTableIter,ti); + public static LuaFunction pairs(LuaTable t) { + final Iterator<Map.Entry<Object,Object>> iter = t.iterator(); + return new LuaFunction() { + public Object[] call(LuaState lua,Object[] args) { + if( !iter.hasNext() ) + return LuaFunction.EMPTY_RTN; + Map.Entry<Object,Object> entry = iter.next(); + return new Object[]{entry.getKey(),entry.getValue()}; + } + }; } - public static LuaFunction pairs(LuaTable t) { - return pairs(t.iterator()); - } - - private static class ArrayIter { - private final LuaTable t; - private double i = 0.0; - - ArrayIter(LuaTable t) { - this.t = t; - } - - public Object[] next() { - LuaNumber n = new LuaNumber(++i); - Object val = t.get(n); - return val==null ? LuaFunction.EMPTY_RTN : new Object[]{n,val}; - } - } - private static final Method nextArrayIter; - static { - try { - nextArrayIter = ArrayIter.class.getMethod("next"); - nextArrayIter.setAccessible(true); - } catch(NoSuchMethodException e) { - throw new RuntimeException(e); - } - } - - public static LuaFunction ipairs(LuaTable t) { - ArrayIter ai = new ArrayIter(t); - return new LuaJavaFunction(nextArrayIter,ai); + 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 LuaTable get_metatable(LuaState lua,Object obj) {