KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > kawa > standard > vector_append


1 package kawa.standard;
2 import gnu.lists.*;
3 import gnu.mapping.*;
4
5 /**
6  * Implement the Scheme extended function "vector-append".
7  * @author Per Bothner
8  */

9
10 public class vector_append extends ProcedureN
11 {
12   public static final vector_append vectorAppend
13     = new vector_append("vector-append");
14
15   public vector_append(String JavaDoc name)
16   {
17     super(name);
18   }
19
20   public Object JavaDoc applyN (Object JavaDoc[] args)
21   {
22     return apply$V(args);
23   }
24
25   public static FVector apply$V (Object JavaDoc[] args)
26   {
27     int length = 0;
28     int args_length = args.length;
29     for (int i = args_length; --i >= 0; )
30       {
31     Object JavaDoc arg = args[i];
32     if (arg instanceof FVector)
33       length += ((FVector)arg).size();
34     else
35       {
36         int n = LList.listLength(arg, false);
37         if (n < 0)
38           throw new WrongType (vectorAppend, i, arg, "list or vector");
39         length += n;
40       }
41       }
42     Object JavaDoc[] result = new Object JavaDoc [length];
43     int position = 0;
44     for (int i = 0; i < args_length; i++)
45       {
46     Object JavaDoc arg = args[i];
47     if (arg instanceof FVector)
48       {
49         FVector vec = (FVector) arg;
50         int vec_length = vec.size();
51         for (int j = 0; j < vec_length; j++)
52           result[position++] = vec.get(j);
53       }
54     else if (arg instanceof Pair)
55       {
56         while (arg != LList.Empty)
57           {
58         Pair pair = (Pair) arg;
59         result[position++] = pair.car;
60         arg = pair.cdr;
61           }
62       }
63       }
64     return new FVector (result);
65   }
66 }
67
Popular Tags