package org.kvj.vimtouch.ext.impl.read;
import java.util.HashMap;
import java.util.Map;
import org.kvj.vimtouch.ext.FieldReader;
import org.kvj.vimtouch.ext.FieldReaderException;
import org.kvj.vimtouch.ext.IncomingTransfer;
import org.kvj.vimtouch.ext.Transferable.FieldType;
public abstract class MapFieldReader<T> implements FieldReader<Map<String, T>> {
private FieldReader<T> itemReader;
private StringFieldReader nameReader = new StringFieldReader() {
@Override
public void set(String value) {
}
};
public MapFieldReader(FieldReader<T> itemReader) {
this.itemReader = itemReader;
}
@Override
public FieldType getType() {
return FieldType.Map;
}
@Override
public Map<String, T> read(IncomingTransfer t) throws FieldReaderException {
int size = t.nextInt();
Map<String, T> data = new HashMap<String, T>(size);
set(data);
for (int i = 0; i < size; i++) {
String name = t.readWith(nameReader);
T value = t.readWith(itemReader);
add(name, value);
}
return data;
}
abstract public void add(String name, T value);
}