package openmods.datastore; import com.google.common.collect.Maps; import java.io.DataInput; import java.io.IOException; import java.util.Map; import openmods.utils.ByteUtils; import openmods.utils.io.IStreamReader; public class DataStoreReader<K, V> { private final IStreamReader<K> keyReader; private final IStreamReader<V> valueReader; private final DataStoreWrapper<K, V> wrapper; DataStoreReader(DataStoreWrapper<K, V> wrapper, IStreamReader<K> keyReader, IStreamReader<V> valueReader) { this.keyReader = keyReader; this.valueReader = valueReader; this.wrapper = wrapper; } public void read(DataInput input) { int size = ByteUtils.readVLI(input); Map<K, V> values = Maps.newHashMap(); try { for (int i = 0; i < size; i++) { K key = keyReader.readFromStream(input); V value = valueReader.readFromStream(input); values.put(key, value); } } catch (IOException e) { throw new RuntimeException(e); } DataStore<K, V> result = new DataStore<K, V>(values); wrapper.activateData(result); } }