1 package kawa.standard; 2 import gnu.lists.*; 3 import gnu.mapping.*; 4 5 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 name) 16 { 17 super(name); 18 } 19 20 public Object applyN (Object [] args) 21 { 22 return apply$V(args); 23 } 24 25 public static FVector apply$V (Object [] args) 26 { 27 int length = 0; 28 int args_length = args.length; 29 for (int i = args_length; --i >= 0; ) 30 { 31 Object 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 [] result = new Object [length]; 43 int position = 0; 44 for (int i = 0; i < args_length; i++) 45 { 46 Object 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 |