CavalliumDBEngine/src/main/java/it/cavallium/dbengine/database/collections/ValueWithHashSerializer.java

55 lines
1.8 KiB
Java
Raw Normal View History

2021-05-08 03:09:00 +02:00
package it.cavallium.dbengine.database.collections;
2022-03-16 13:47:56 +01:00
import io.netty5.buffer.api.Buffer;
import io.netty5.buffer.api.BufferAllocator;
import io.netty5.buffer.api.CompositeBuffer;
import io.netty5.buffer.api.Send;
2021-05-08 03:09:00 +02:00
import it.cavallium.dbengine.database.LLUtils;
2021-08-22 21:23:22 +02:00
import it.cavallium.dbengine.database.serialization.SerializationException;
2021-05-08 03:09:00 +02:00
import it.cavallium.dbengine.database.serialization.Serializer;
import java.util.Map;
import java.util.Map.Entry;
2021-09-22 18:33:28 +02:00
import java.util.Objects;
2021-05-08 03:09:00 +02:00
import org.jetbrains.annotations.NotNull;
2021-09-22 18:33:28 +02:00
import org.jetbrains.annotations.Nullable;
2021-05-08 03:09:00 +02:00
2021-09-01 00:01:56 +02:00
class ValueWithHashSerializer<X, Y> implements Serializer<Entry<X, Y>> {
2021-05-08 03:09:00 +02:00
2021-09-01 00:01:56 +02:00
private final Serializer<X> keySuffixSerializer;
private final Serializer<Y> valueSerializer;
2021-05-08 03:09:00 +02:00
2021-10-19 00:22:05 +02:00
ValueWithHashSerializer(
2021-09-01 00:01:56 +02:00
Serializer<X> keySuffixSerializer,
Serializer<Y> valueSerializer) {
2021-05-08 03:09:00 +02:00
this.keySuffixSerializer = keySuffixSerializer;
this.valueSerializer = valueSerializer;
}
@Override
2021-10-19 00:22:05 +02:00
public @NotNull Entry<X, Y> deserialize(@NotNull Buffer serialized) throws SerializationException {
Objects.requireNonNull(serialized);
X deserializedKey = keySuffixSerializer.deserialize(serialized);
Y deserializedValue = valueSerializer.deserialize(serialized);
return Map.entry(deserializedKey, deserializedValue);
2021-05-08 03:09:00 +02:00
}
@Override
2021-10-19 00:22:05 +02:00
public void serialize(@NotNull Entry<X, Y> deserialized, Buffer output) throws SerializationException {
keySuffixSerializer.serialize(deserialized.getKey(), output);
valueSerializer.serialize(deserialized.getValue(), output);
}
@Override
public int getSerializedSizeHint() {
var hint1 = keySuffixSerializer.getSerializedSizeHint();
var hint2 = valueSerializer.getSerializedSizeHint();
if (hint1 == -1 && hint2 == -1) {
return -1;
} else if (hint1 == -1) {
return hint2;
} else {
return hint1;
}
2021-05-08 03:09:00 +02:00
}
}