--- /dev/null
+// Copyright 2000-2005 the Contributors, as shown in the revision logs.
+// Licensed under the Apache Public Source License 2.0 ("the License").
+// You may not use this file except in compliance with the License.
+
+package org.ibex.util;
+import java.util.*;
+import java.net.*;
+import java.io.*;
+
+/** run cycle() repeatedly, no more often than minCycleTimeMillis; catch and log any exceptions. */
+public abstract class ImmortalThread extends Thread {
+
+ private final int minCycleTimeMillis;
+ public ImmortalThread() { this(500); }
+ public ImmortalThread(int minCycleTimeMillis) { this.minCycleTimeMillis = minCycleTimeMillis; }
+
+ public abstract void cycle() throws Exception;
+
+ public final void run() {
+ while(true) {
+ long now = System.currentTimeMillis();
+ try {
+ cycle();
+ } catch (Exception e) { Log.warn(this, e); }
+ long now2 = System.currentTimeMillis();
+ if (now2 - now < minCycleTimeMillis)
+ try { Thread.sleep(minCycleTimeMillis - (now2 - now)); } catch (Exception e) { }
+ }
+ }
+
+}
return -1;
}
+ public void add(Object o) { addElement(o); }
public void addElement(Object o) {
if (size >= store.length - 1) grow();
store[size++] = o;
return lastElement();
}
+ public Object get(int i) { return elementAt(i); }
public Object elementAt(int i) {
return store[i];
}
store[i] = in[i];
}
+ public void remove(int i) { removeElementAt(i); }
public void removeElementAt(int i) {
if (i >= size || i < 0) throw new RuntimeException("tried to remove an element outside the vector's limits");
for(int j=i; j<size - 1; j++)