package org.jmlspecs.openjml.esc; import java.util.HashMap; import java.util.Map; import org.jmlspecs.openjml.Utils; // FIXME - document public class BiMap<T1,T2> { Map<T1,T2> forward = new HashMap<T1, T2>(); Map<T2,T1> reverse = new HashMap<T2, T1>(); public void put(T1 t1, T2 t2) { forward.put(t1, t2); reverse.put(t2, t1); } public void putf(T1 t1, T2 t2) { forward.put(t1, t2); } public T2 getf(T1 t) { return forward.get(t); } public T1 getr(T2 t) { return reverse.get(t); } public void clear() { forward.clear(); reverse.clear(); } public <T3> BiMap<T1,T3> compose(BiMap<T2,T3> bimap) { BiMap<T1,T3> newmap = new BiMap<T1,T3>(); for (T1 t1: forward.keySet()) { T2 t2 = getf(t1); T3 t3 = bimap.getf(t2); if (t3 != null) newmap.put(t1, t3); } return newmap; } public <T3> Map<T1,T3> compose(Map<T2,T3> bimap) { Map<T1,T3> newmap = new HashMap<T1,T3>(); for (T1 t1: forward.keySet()) { T2 t2 = getf(t1); T3 t3 = bimap.get(t2); newmap.put(t1, t3); } return newmap; } }