1 4 package gnu.kawa.functions; 5 import gnu.lists.*; 6 import gnu.mapping.*; 7 8 public class ArrayRef extends ProcedureN 9 { 10 public static final ArrayRef arrayRef = new ArrayRef(); 11 12 public static Object arrayRef(Array array, Sequence index) 13 { 14 int dims = index.size(); 15 int[] indexes = new int[dims]; 16 for (int i = 0; i < dims; i++) 17 { 18 indexes[i] = ((Number ) index.get(i)).intValue(); 19 } 20 return array.get(indexes); 21 } 22 23 public Object apply2 (Object arg0, Object arg1) 24 throws Throwable 25 { 26 if (arg1 instanceof Sequence) 27 return arrayRef((Array) arg0, (Sequence) arg1); 28 return super.apply2(arg0, arg1); 29 } 30 31 public Object applyN (Object [] args) 32 throws Throwable 33 { 34 Array array = (Array) args[0]; 35 36 if (args.length == 2) 37 { 38 Object arg1 = args[1]; 39 if (arg1 instanceof Sequence) 40 return arrayRef(array, (Sequence) arg1); 41 } 42 int[] indexes = new int[args.length-1]; 43 for (int i = args.length-1; --i >= 0; ) 44 { 45 indexes[i] = ((Number ) args[i+1]).intValue(); 46 } 47 return array.get(indexes); 48 } 49 } 50 | Popular Tags |