package edu.berkeley.lipstick.util; import java.io.Serializable; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicLong; public class KeyDependencySet implements Serializable { private ConcurrentHashMap<String, KeyDependency> deps; public KeyDependencySet() { deps = new ConcurrentHashMap<String, KeyDependency> (); } public final Set<String> getKeys() { return deps.keySet(); } public KeyDependencySet putDependency(String key, KeyDependency newDep) { deps.put(key, newDep); return this; } public KeyDependencySet(Iterable<DataWrapper> dws) { this(); for(DataWrapper dw : dws) { for(String depKey : dw.getKeyDependencySet().getKeys()) { KeyDependency dep = dw.getKeyDependencySet().getDependency(depKey); if(deps.containsKey(depKey)) deps.get(depKey).getClock().mergeClock(dep.getClock()); else deps.put(depKey, new KeyDependency(dep)); } } } public final KeyDependency getDependency(Object key) { return deps.get(key); } public final Collection<KeyDependency> getDependencies() { return deps.values(); } }