package it.cavallium.dbengine.database.collections; import io.net5.buffer.api.Buffer; import io.net5.buffer.api.Drop; import io.net5.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.collections.DatabaseEmpty.Nothing; import it.cavallium.dbengine.database.serialization.Serializer; import it.cavallium.dbengine.database.serialization.SerializerFixedBinaryLength; import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.function.Function; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import reactor.core.publisher.Mono; @SuppressWarnings("unused") public class DatabaseSetDictionaryHashed extends DatabaseMapDictionaryHashed { protected DatabaseSetDictionaryHashed(LLDictionary dictionary, @NotNull Send prefixKey, Serializer keySuffixSerializer, Function keySuffixHashFunction, SerializerFixedBinaryLength keySuffixHashSerializer, Drop> drop) { super(dictionary, prefixKey, keySuffixSerializer, DatabaseEmpty.nothingSerializer(dictionary.getAllocator()), keySuffixHashFunction, keySuffixHashSerializer, drop ); } public static DatabaseSetDictionaryHashed simple(LLDictionary dictionary, Serializer keySerializer, Function keyHashFunction, SerializerFixedBinaryLength keyHashSerializer, Drop> drop) { return new DatabaseSetDictionaryHashed<>(dictionary, LLUtils.empty(dictionary.getAllocator()), keySerializer, keyHashFunction, keyHashSerializer, drop ); } public static DatabaseSetDictionaryHashed tail(LLDictionary dictionary, Send prefixKey, Serializer keySuffixSerializer, Function keyHashFunction, SerializerFixedBinaryLength keyHashSerializer, Drop> drop) { return new DatabaseSetDictionaryHashed<>(dictionary, prefixKey, keySuffixSerializer, keyHashFunction, keyHashSerializer, drop ); } public Mono> getKeySet(@Nullable CompositeSnapshot snapshot) { return get(snapshot).map(Map::keySet); } public Mono> setAndGetPreviousKeySet(Set value) { var hm = new HashMap(); for (T t : value) { hm.put(t, DatabaseEmpty.NOTHING); } return setAndGetPrevious(hm).map(Map::keySet); } public Mono> clearAndGetPreviousKeySet() { return clearAndGetPrevious().map(Map::keySet); } }