package com.googlecode.totallylazy.collections; import com.googlecode.totallylazy.Maps; import com.googlecode.totallylazy.Pair; import com.googlecode.totallylazy.Segment; import com.googlecode.totallylazy.Sequences; import java.util.Map; import static com.googlecode.totallylazy.Pair.pair; import static com.googlecode.totallylazy.Sequences.empty; import static com.googlecode.totallylazy.Sequences.sequence; public abstract class AbstractMapFactory<K, V, M extends PersistentMap<K, V>> implements MapFactory<K,V,M> { @Override public M empty(Class<K> kClass, Class<V> vClass) { return empty(); } @Override public M map() { return empty(); } @Override public M map(K key, V value) { return map(sequence(pair(key, value))); } @Override public M map(K key1, V value1, K key2, V value2) { return map(sequence(pair(key1, value1), pair(key2, value2))); } public M map(K key1, V value1, K key2, V value2, K key3, V value3) { return map(sequence(pair(key1, value1), pair(key2, value2), pair(key3, value3))); } public M map(K key1, V value1, K key2, V value2, K key3, V value3, K key4, V value4) { return map(sequence(pair(key1, value1), pair(key2, value2), pair(key3, value3), pair(key4, value4))); } public M map(K key1, V value1, K key2, V value2, K key3, V value3, K key4, V value4, K key5, V value5) { return map(sequence(pair(key1, value1), pair(key2, value2), pair(key3, value3), pair(key4, value4), pair(key5, value5))); } @SafeVarargs public final M map(final Pair<K, V> head, final Pair<K, V>... tail) { return map(sequence(tail).cons(head)); } @Override public M map(Map<K, V> values) { return map(Maps.pairs(values)); } @Override public M map(Iterable<? extends Pair<K, V>> values) { return sequence(values).fold(this.empty(), Segment.functions.<Pair<K, V>, M>cons()); } }