org.infinispan.marshall.exts.DoubleSummaryStatisticsExternalizer Maven / Gradle / Ivy
package org.infinispan.marshall.exts;
import org.infinispan.commons.marshall.AbstractExternalizer;
import org.infinispan.commons.marshall.NotSerializableException;
import org.infinispan.commons.util.Util;
import org.infinispan.marshall.core.Ids;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.lang.reflect.Field;
import java.util.DoubleSummaryStatistics;
import java.util.Set;
/**
* Externalizer used for {@link DoubleSummaryStatistics}. Note this assumes given fields have specific names to use
* through reflection.
*
* @author wburns
* @since 8.2
*/
public class DoubleSummaryStatisticsExternalizer extends AbstractExternalizer {
static final Field countField;
static final Field sumField;
static final Field sumCompensationField;
static final Field simpleSumField;
static final Field minField;
static final Field maxField;
static final boolean canSerialize;
static {
countField = SecurityActions.getField(DoubleSummaryStatistics.class, "count");
sumField = SecurityActions.getField(DoubleSummaryStatistics.class, "sum");
sumCompensationField = SecurityActions.getField(DoubleSummaryStatistics.class, "sumCompensation");
simpleSumField = SecurityActions.getField(DoubleSummaryStatistics.class, "simpleSum");
minField = SecurityActions.getField(DoubleSummaryStatistics.class, "min");
maxField = SecurityActions.getField(DoubleSummaryStatistics.class, "max");
// We can only properly serialize if all of the fields are non null
canSerialize = countField != null && sumField != null && sumCompensationField != null && simpleSumField != null
&& minField != null && maxField != null;
}
@Override
public Set> getTypeClasses() {
return Util.>asSet(DoubleSummaryStatistics.class);
}
private void verifySerialization() {
if (!canSerialize) {
throw new NotSerializableException("DoubleSummaryStatistics is not serializable, fields not available!");
}
}
@Override
public void writeObject(ObjectOutput output, DoubleSummaryStatistics object) throws IOException {
verifySerialization();
try {
output.writeLong(countField.getLong(object));
output.writeDouble(sumField.getDouble(object));
output.writeDouble(sumCompensationField.getDouble(object));
output.writeDouble(simpleSumField.getDouble(object));
output.writeDouble(minField.getDouble(object));
output.writeDouble(maxField.getDouble(object));
} catch (IllegalAccessException e) {
// This can't happen as we force accessibility in the getField
throw new IOException(e);
}
}
@Override
public DoubleSummaryStatistics readObject(ObjectInput input) throws IOException, ClassNotFoundException {
verifySerialization();
DoubleSummaryStatistics summaryStatistics = new DoubleSummaryStatistics();
try {
countField.setLong(summaryStatistics, input.readLong());
sumField.setDouble(summaryStatistics, input.readDouble());
sumCompensationField.setDouble(summaryStatistics, input.readDouble());
simpleSumField.setDouble(summaryStatistics, input.readDouble());
minField.setDouble(summaryStatistics, input.readDouble());
maxField.setDouble(summaryStatistics, input.readDouble());
} catch (IllegalAccessException e) {
// This can't happen as we force accessibility in the getField
throw new IOException(e);
}
return summaryStatistics;
}
@Override
public Integer getId() {
return Ids.DOUBLE_SUMMARY_STATISTICS;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy