Immediately
- Performance
-
- - Forest: keep() and valid() -- can we do this with states
- rather than subtrees?
-
- hash Long->long: it's all bogus
* pick back up cleaning up end of Parser.java (Reduction)
--- /dev/null
+package edu.berkeley.sbp.util;
+import java.util.*;
+
+public final class ConcatenatedIterator<T> implements Iterator<T>, Iterable<T> {
+
+ private final Iterator<Iterable<T>> ita;
+ private Iterator<T> cur;
+
+ public ConcatenatedIterator(Iterator<Iterable<T>> ita) {
+ this.ita = ita;
+ cur = ita.hasNext() ? ita.next().iterator() : null;
+ }
+
+ public void remove() { throw new Error(); }
+ public Iterator<T> iterator() { return this; }
+ public boolean hasNext() {
+ while (cur!=null && !cur.hasNext())
+ cur = ita.hasNext() ? ita.next().iterator() : null;
+ return cur!=null && cur.hasNext();
+ }
+ public T next() {
+ while (cur!=null && !cur.hasNext())
+ cur = ita.hasNext() ? ita.next().iterator() : null;
+ return cur==null ? null : cur.next();
+ }
+}
--- /dev/null
+package edu.berkeley.sbp.util;
+import java.util.*;
+
+/** a mapping from keys of type <tt>K</tt> to <i>sets</i> of values of type <tt>T</tt> */
+public final class IntPairMap<V> {
+
+ private final HashMap<Long, V> hm = new HashMap<Long, V>();
+
+ private static long key(IntegerMappable k1, IntegerMappable k2) {
+ return (k1==null ? 0 : (((long)k1.toInt()) << 32)) | (k2==null ? 0 : k2.toInt());
+ }
+
+ public void put(IntegerMappable k1, IntegerMappable k2, V v) { hm.put(key(k1, k2), v); }
+ public V get(IntegerMappable k1, IntegerMappable k2) { return hm.get(key(k1, k2)); }
+ public Iterable<V> values() { return hm.values(); }
+ public int size() { return hm.size(); }
+ public void toArray(V[] v) { hm.values().toArray(v); }
+}
--- /dev/null
+package edu.berkeley.sbp.util;
+
+public interface IntegerMappable {
+ public int toInt();
+}