Mercurial Hosting > luan
diff core/src/luan/modules/BasicLuan.java @ 221:ec016471c6eb
make LuanTable an interface
git-svn-id: https://luan-java.googlecode.com/svn/trunk@222 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Thu, 17 Jul 2014 07:49:26 +0000 |
parents | 75750ceb45ee |
children | ef39bc4d3f70 |
line wrap: on
line diff
--- a/core/src/luan/modules/BasicLuan.java Wed Jul 16 04:59:45 2014 +0000 +++ b/core/src/luan/modules/BasicLuan.java Thu Jul 17 07:49:26 2014 +0000 @@ -22,7 +22,7 @@ public static final LuanFunction LOADER = new LuanFunction() { @Override public Object call(LuanState luan,Object[] args) { - LuanTable module = new LuanTable(); + LuanTable module = Luan.newTable(); try { module.put( "assert", new LuanJavaFunction(BasicLuan.class.getMethod("assert_",LuanState.class,Object.class,String.class),null) ); add( module, "assert_boolean", LuanState.class, Boolean.TYPE ); @@ -85,8 +85,11 @@ return luan.call(fn); } - private static LuanFunction pairs(final Iterator<Map.Entry<Object,Object>> iter) { + public static LuanFunction pairs(LuanState luan,final LuanTable t) throws LuanException { + Utils.checkNotNull(luan,t,"table"); return new LuanFunction() { + Iterator<Map.Entry<Object,Object>> iter = t.iterator(); + @Override public Object[] call(LuanState luan,Object[] args) { if( !iter.hasNext() ) return LuanFunction.NOTHING; @@ -96,14 +99,20 @@ }; } - public static LuanFunction pairs(LuanState luan,LuanTable t) throws LuanException { + public static LuanFunction ipairs(LuanState luan,final LuanTable t) throws LuanException { Utils.checkNotNull(luan,t,"table"); - return pairs( t.iterator() ); - } + return new LuanFunction() { + List<Object> list = t.asList(); + int i = 0; + final int size = list.size(); - public static LuanFunction ipairs(LuanState luan,LuanTable t) throws LuanException { - Utils.checkNotNull(luan,t,"table"); - return pairs( t.listIterator() ); + @Override public Object[] call(LuanState luan,Object[] args) { + if( i >= size ) + return LuanFunction.NOTHING; + Object val = list.get(i++); + return new Object[]{i,val}; + } + }; } public static LuanTable get_metatable(LuanState luan,Object obj) {