package it.cavallium.dbengine.database; import io.netty5.buffer.api.Send; import java.util.function.Supplier; public abstract class RangeSupplier implements DiscardingCloseable, Supplier { public static RangeSupplier of(Supplier supplier) { return new SimpleSupplier(supplier); } public static RangeSupplier of(Send supplier) { return new CopySupplier(supplier.receive()); } public static RangeSupplier ofOwned(LLRange supplier) { return new CopySupplier(supplier); } public static RangeSupplier ofShared(LLRange supplier) { return new SimpleSupplier(supplier::copy); } private static final class SimpleSupplier extends RangeSupplier { private final Supplier supplier; public SimpleSupplier(Supplier supplier) { this.supplier = supplier; } @Override public LLRange get() { return supplier.get(); } @Override public void close() { } } private static final class CopySupplier extends RangeSupplier { private final LLRange supplier; public CopySupplier(LLRange supplier) { this.supplier = supplier; } @Override public LLRange get() { return supplier.copy(); } @Override public void close() { supplier.close(); } } }