package it.cavallium.dbengine.database.collections; import io.netty.buffer.api.Buffer; import io.netty.buffer.api.Send; import io.netty.util.ReferenceCounted; import it.cavallium.dbengine.client.CompositeSnapshot; import it.cavallium.dbengine.database.LLDictionary; import it.cavallium.dbengine.database.collections.DatabaseEmpty.Nothing; import it.cavallium.dbengine.database.serialization.SerializerFixedBinaryLength; import java.util.List; import java.util.Map; import org.jetbrains.annotations.Nullable; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; public class SubStageGetterSet implements SubStageGetter, DatabaseSetDictionary> { private final SerializerFixedBinaryLength keySerializer; public SubStageGetterSet(SerializerFixedBinaryLength keySerializer) { this.keySerializer = keySerializer; } @Override public Mono> subStage(LLDictionary dictionary, @Nullable CompositeSnapshot snapshot, Mono> prefixKeyMono) { return Mono.usingWhen(prefixKeyMono, prefixKey -> Mono .fromSupplier(() -> DatabaseSetDictionary.tail(dictionary, prefixKey, keySerializer)), prefixKey -> Mono.fromRunnable(prefixKey::close) ); } @Override public boolean isMultiKey() { return true; } public int getKeyBinaryLength() { return keySerializer.getSerializedBinaryLength(); } }