package net.nullschool.grains.kryo; import com.esotericsoftware.kryo.Kryo; import com.esotericsoftware.kryo.Serializer; import com.esotericsoftware.kryo.io.Input; import com.esotericsoftware.kryo.io.Output; import net.nullschool.collect.ConstSortedSet; import java.util.Comparator; import static net.nullschool.collect.basic.BasicCollections.*; /** * 2013-06-03<p/> * * Kryo serializer for BasicConstSortedSet using the form {comparator, int_size, E0, E1, ..., En}. * * @author Cameron Beccario */ public class BasicConstSortedSetSerializer extends Serializer<ConstSortedSet> { @Override public void write(Kryo kryo, Output output, ConstSortedSet set) { kryo.writeClassAndObject(output, set.comparator()); output.writeInt(set.size(), true); for (Object o : set) { kryo.writeClassAndObject(output, o); } } @Override public ConstSortedSet<?> read(Kryo kryo, Input input, Class<ConstSortedSet> type) { @SuppressWarnings("unchecked") Comparator<Object> comparator = (Comparator<Object>)kryo.readClassAndObject(input); final int size = input.readInt(true); switch (size) { case 0: return emptySortedSet(comparator); case 1: return sortedSetOf(comparator, kryo.readClassAndObject(input)); default: Object[] elements = new Object[size]; for (int i = 0; i < size; i++) { elements[i] = kryo.readClassAndObject(input); } return asSortedSet(comparator, elements); } } }