KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > gnu > kawa > functions > ArrayRef


1 // Copyright (c) 2002 Per M.A. Bothner and Brainfood Inc.
2
// This is free software; for terms and warranty disclaimer see ./COPYING.
3

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 JavaDoc 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 JavaDoc) index.get(i)).intValue();
19       }
20     return array.get(indexes);
21   }
22
23   public Object JavaDoc apply2 (Object JavaDoc arg0, Object JavaDoc arg1)
24     throws Throwable JavaDoc
25   {
26     if (arg1 instanceof Sequence)
27       return arrayRef((Array) arg0, (Sequence) arg1);
28     return super.apply2(arg0, arg1);
29   }
30
31   public Object JavaDoc applyN (Object JavaDoc[] args)
32     throws Throwable JavaDoc
33   {
34     Array array = (Array) args[0];
35
36     if (args.length == 2)
37       {
38     Object JavaDoc 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 JavaDoc) args[i+1]).intValue();
46       }
47     return array.get(indexes);
48   }
49 }
50
Popular Tags