1 4 package gnu.lists; 5 import java.io.*; 6 7 8 9 public class FVector extends SimpleVector 10 implements Externalizable, Consumable 11 12 , Comparable 13 14 { 15 public Object [] data; 16 17 protected static Object [] empty = new Object [0]; 18 19 public FVector () 20 { 21 data = empty; 22 } 23 24 public FVector (int num) 25 { 26 size = num; 27 data = new Object [num]; 28 } 29 30 public FVector (int num, Object o) 31 { 32 Object [] data = new Object [num]; 33 if (o != null) 34 { 35 for (int i = 0; i < num; i++) 36 data[i] = o; 37 } 38 this.data = data; 39 this.size = num; 40 } 41 42 43 public FVector (Object [] data) 44 { 45 this.size = data.length; 46 this.data = data; 47 } 48 49 50 public FVector(java.util.List seq) 51 { 52 this.data = new Object [seq.size()]; 53 addAll(seq); 54 } 55 56 57 63 64 65 public int getBufferLength() 66 { 67 return data.length; 68 } 69 70 public void setBufferLength(int length) 71 { 72 int oldLength = data.length; 73 if (oldLength != length) 74 { 75 Object [] tmp = new Object [length]; 76 System.arraycopy(data, 0, tmp, 0, 77 oldLength < length ? oldLength : length); 78 data = tmp; 79 } 80 } 81 82 protected Object getBuffer() { return data; } 83 84 public void shift(int srcStart, int dstStart, int count) 85 { 86 System.arraycopy(data, srcStart, data, dstStart, count); 87 } 88 89 public final Object getBuffer(int index) 90 { 91 return data[index]; 92 } 93 94 public final Object get (int index) 95 { 96 if (index >= size) 97 throw new ArrayIndexOutOfBoundsException (); 98 return data[index]; 99 } 100 101 public final Object setBuffer(int index, Object value) 102 { 103 Object old = data[index]; 104 data[index] = value; 105 return old; 106 } 107 108 protected void clearBuffer(int start, int count) 109 { 110 while (--count >= 0) 111 data[start++] = null; 112 } 113 114 public boolean equals (Object obj) 115 { 116 if (obj == null || !(obj instanceof FVector)) 117 return false; 118 FVector obj_vec = (FVector) obj; 119 int n = size; 120 if (obj_vec.data == null || obj_vec.size != n) 121 return false; 122 Object [] obj_data = obj_vec.data; 123 for (int i = 0; i < n; i++) 124 { 125 if (! (data[i].equals (obj_data[i]))) 126 return false; 127 } 128 return true; 129 } 130 131 132 public int compareTo(Object obj) 133 { 134 FVector vec2 = (FVector) obj; 135 Object [] d1 = data; 136 Object [] d2 = vec2.data; 137 int n1 = size; 138 int n2 = vec2.size; 139 int n = n1 > n2 ? n2 : n1; 140 for (int i = 0; i < n; i++) 141 { 142 Comparable v1 = (Comparable ) d1[i]; 143 Comparable v2 = (Comparable ) d2[i]; 144 int d = v1.compareTo(v2); 145 if (d != 0) 146 return d; 147 } 148 return n1 - n2; 149 } 150 151 152 160 161 public final void setAll (Object new_value) 163 { 164 for (int i = size; --i >= 0; ) 165 data[i] = new_value; 166 } 167 168 public boolean consumeNext(int ipos, Consumer out) 169 { 170 int index = ipos >>> 1; 171 if (index >= size) 172 return false; 173 out.writeObject(data[index]); 174 return true; 175 } 176 177 public void consumePosRange (int iposStart, int iposEnd, Consumer out) 178 { 179 if (out.ignoring()) 180 return; 181 int i = iposStart >>> 1; 182 int end = iposEnd >>> 1; 183 if (end > size) 184 end = size; 185 for (; i < end; i++) 186 out.writeObject(data[i]); 187 } 188 189 public void consume(Consumer out) 190 { 191 out.beginGroup("#vector"); 192 int len = size; 193 for (int i = 0; i < len; i++) 194 out.writeObject(data[i]); 195 out.endGroup(); 196 } 197 198 204 public void writeExternal(ObjectOutput out) throws IOException 205 { 206 int n = size; 207 out.writeInt(n); 208 for (int i = 0; i < n; i++) 209 out.writeObject(data[i]); 210 } 211 212 public void readExternal(ObjectInput in) 213 throws IOException, ClassNotFoundException 214 { 215 int n = in.readInt(); 216 Object [] data = new Object [n]; 217 for (int i = 0; i < n; i++) 218 data[i] = in.readObject(); 219 size = n; 220 this.data = data; 221 } 222 } 223 | Popular Tags |