package jetbrains.buildServer.tools; import org.jetbrains.annotations.NotNull; import java.util.Collection; import java.util.Map; import java.util.Set; import java.util.TreeMap; /** * Created 03.07.13 20:33 * * @author Eugene Petrenko (eugene.petrenko@jetbrains.com) */ public abstract class LazyMap<K extends Comparable<K>, V> { private final Map<K, V> myMap; /** * @since 7.0 */ protected LazyMap() { this(new TreeMap<K, V>()); } /** * @param map to store values * @since 8.0 */ protected LazyMap(@NotNull final Map<K, V> map) { myMap = map; } @NotNull protected abstract V computeValue(@NotNull final K k); @NotNull public V get(@NotNull final K k) { V v = myMap.get(k); if (v == null) { v = computeValue(k); myMap.put(k, v); } return v; } /** * @return map of all currently created values * @since 8.0 */ @NotNull public Map<K,V> getCreatedValues() { return myMap; } /** * @return allocated keys * @since 8.0 */ @NotNull public Set<K> keySet() { return myMap.keySet(); } @NotNull public Collection<V> values() { return myMap.values(); } public boolean isEmpty() { return myMap.isEmpty(); } }