package it.cavallium.dbengine.database.collections; import io.netty5.buffer.api.Buffer; import io.netty5.buffer.api.Resource; import io.netty5.buffer.api.Send; import it.cavallium.dbengine.client.CompositeSnapshot; import it.cavallium.dbengine.database.LLDictionary; import it.cavallium.dbengine.database.LLUtils; import it.cavallium.dbengine.database.serialization.Serializer; import it.cavallium.dbengine.database.serialization.SerializerFixedBinaryLength; import it.unimi.dsi.fastutil.objects.Object2ObjectSortedMap; import java.util.Map; import java.util.function.Function; import org.jetbrains.annotations.Nullable; import reactor.core.publisher.Mono; @SuppressWarnings("unused") public class SubStageGetterHashMap implements SubStageGetter, DatabaseMapDictionaryHashed> { private final Serializer keySerializer; private final Serializer valueSerializer; private final Function keyHashFunction; private final SerializerFixedBinaryLength keyHashSerializer; public SubStageGetterHashMap(Serializer keySerializer, Serializer valueSerializer, Function keyHashFunction, SerializerFixedBinaryLength keyHashSerializer) { this.keySerializer = keySerializer; this.valueSerializer = valueSerializer; this.keyHashFunction = keyHashFunction; this.keyHashSerializer = keyHashSerializer; } @Override public Mono> subStage(LLDictionary dictionary, @Nullable CompositeSnapshot snapshot, Mono> prefixKeyMono) { return prefixKeyMono.map(prefixKeyToReceive -> { var prefixKey = prefixKeyToReceive.receive(); return DatabaseMapDictionaryHashed.tail(dictionary, prefixKey, keySerializer, valueSerializer, keyHashFunction, keyHashSerializer, null ); }); } public int getKeyHashBinaryLength() { return keyHashSerializer.getSerializedBinaryLength(); } }