package org.fastcatsearch.ir.field;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.fastcatsearch.ir.io.DataInput;
import org.fastcatsearch.ir.io.DataOutput;
public class DoubleMvField extends DoubleField implements MultiValueFieldType {
public DoubleMvField(String id){
super(id);
multiValue = true;
fieldsData = new ArrayList<Object>();
}
public DoubleMvField(String id, String data){
super(id, data);
multiValue = true;
}
@Override
public void readFrom(DataInput input) throws IOException {
int multiValueCount = input.readVInt();
fieldsData = new ArrayList<Object>(multiValueCount);
for (int i = 0; i < multiValueCount; i++) {
((List<Object>) fieldsData).add(Double.longBitsToDouble(input.readLong()));
}
}
@Override
public void writeTo(DataOutput output) throws IOException {
List<Object> list = (List<Object>) fieldsData;
int multiValueCount = list.size();
output.writeVInt(multiValueCount);
writeFixedDataTo(output, 0, false);
}
@Override
public void writeFixedDataTo(DataOutput output, int indexSize, boolean upperCase) throws IOException {
List<Object> list = (List<Object>) fieldsData;
for (int i = 0; i < list.size(); i++) {
Double v = (Double) list.get(i);
output.writeLong(Double.doubleToLongBits(v));
}
}
@Override
public FieldDataWriter getDataWriter() throws IOException {
final List<Double> list = (List<Double>) fieldsData;
return new FieldDataWriter(list) {
@Override
protected void writeEachData(Object object, DataOutput output) throws IOException {
Double v = (Double) object;
output.writeLong(Double.doubleToLongBits(v));
}
};
}
}