comparison src/luan/lib/BasicLib.java @ 109:219e05867366

remove NumericForStmt; add BasicLib.range(); git-svn-id: https://luan-java.googlecode.com/svn/trunk@110 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Fri, 23 May 2014 04:30:29 +0000
parents 3c404a296995
children 2428ecfed375
comparison
equal deleted inserted replaced
108:3c404a296995 109:219e05867366
38 add( global, "ipairs", LuanState.class, LuanTable.class ); 38 add( global, "ipairs", LuanState.class, LuanTable.class );
39 add( global, "load", LuanState.class, String.class, String.class, Boolean.class ); 39 add( global, "load", LuanState.class, String.class, String.class, Boolean.class );
40 add( global, "load_file", LuanState.class, String.class ); 40 add( global, "load_file", LuanState.class, String.class );
41 add( global, "pairs", LuanState.class, LuanTable.class ); 41 add( global, "pairs", LuanState.class, LuanTable.class );
42 add( global, "print", LuanState.class, new Object[0].getClass() ); 42 add( global, "print", LuanState.class, new Object[0].getClass() );
43 add( global, "range", LuanState.class, Double.TYPE, Double.TYPE, Double.class );
43 add( global, "raw_equal", Object.class, Object.class ); 44 add( global, "raw_equal", Object.class, Object.class );
44 add( global, "raw_get", LuanTable.class, Object.class ); 45 add( global, "raw_get", LuanTable.class, Object.class );
45 add( global, "raw_len", LuanState.class, Object.class ); 46 add( global, "raw_len", LuanState.class, Object.class );
46 add( global, "raw_set", LuanTable.class, Object.class, Object.class ); 47 add( global, "raw_set", LuanTable.class, Object.class, Object.class );
47 add( global, "repr", LuanState.class, Object.class ); 48 add( global, "repr", LuanState.class, Object.class );
96 return luan.JAVA.call(fn,null); 97 return luan.JAVA.call(fn,null);
97 } 98 }
98 99
99 private static LuanFunction pairs(final Iterator<Map.Entry<Object,Object>> iter) { 100 private static LuanFunction pairs(final Iterator<Map.Entry<Object,Object>> iter) {
100 return new LuanFunction() { 101 return new LuanFunction() {
101 public Object[] call(LuanState luan,Object[] args) { 102 @Override public Object[] call(LuanState luan,Object[] args) {
102 if( !iter.hasNext() ) 103 if( !iter.hasNext() )
103 return LuanFunction.EMPTY; 104 return LuanFunction.EMPTY;
104 Map.Entry<Object,Object> entry = iter.next(); 105 Map.Entry<Object,Object> entry = iter.next();
105 return new Object[]{entry.getKey(),entry.getValue()}; 106 return new Object[]{entry.getKey(),entry.getValue()};
106 } 107 }
198 199
199 public static String repr(LuanState luan,Object v) throws LuanException { 200 public static String repr(LuanState luan,Object v) throws LuanException {
200 return luan.JAVA.repr(v); 201 return luan.JAVA.repr(v);
201 } 202 }
202 203
204 public static LuanFunction range(LuanState luan,final double from,final double to,Double stepV) throws LuanException {
205 final double step = stepV==null ? 1.0 : stepV;
206 if( step == 0.0 )
207 throw luan.JAVA.exception("bad argument #3 (step may not be zero)");
208 return new LuanFunction() {
209 double v = from;
210
211 @Override public Object[] call(LuanState luan,Object[] args) {
212 if( step > 0.0 && v > to || step < 0.0 && v < to )
213 return LuanFunction.EMPTY;
214 double rtn = v;
215 v += step;
216 return new Object[]{rtn};
217 }
218 };
219 }
220
203 } 221 }