Add serializer for BitSet.

This commit is contained in:
Florian Nücke
2020-12-08 19:19:41 +01:00
parent 5890ce3451
commit af2f28dc72

View File

@@ -0,0 +1,36 @@
package li.cil.oc2.serialization.serializers;
import li.cil.ceres.api.*;
import javax.annotation.Nullable;
import java.util.BitSet;
@RegisterSerializer
public final class BitSetSerializer implements Serializer<BitSet> {
@Override
public void serialize(final SerializationVisitor visitor, final Class<BitSet> type, final Object value) throws SerializationException {
visitor.putObject("value", long[].class, ((BitSet) value).toLongArray());
}
@Override
public BitSet deserialize(final DeserializationVisitor visitor, final Class<BitSet> type, @Nullable final Object value) throws SerializationException {
BitSet bitSet = (BitSet) value;
if (!visitor.exists("value")) {
return bitSet;
}
final long[] longs = (long[]) visitor.getObject("value", long[].class, null);
if (longs == null) {
return null;
}
if (bitSet == null) {
bitSet = BitSet.valueOf(longs);
} else {
bitSet.clear();
bitSet.or(BitSet.valueOf(longs));
}
return bitSet;
}
}