From 2129bef5beead70f0d46b07ae26a39310f4d5292 Mon Sep 17 00:00:00 2001 From: John Bogovic Date: Mon, 23 Mar 2026 14:29:16 -0400 Subject: [PATCH] fix: remove writeRegion default implementations --- .../org/janelia/saalfeldlab/n5/N5Writer.java | 62 +++---------------- 1 file changed, 9 insertions(+), 53 deletions(-) diff --git a/src/main/java/org/janelia/saalfeldlab/n5/N5Writer.java b/src/main/java/org/janelia/saalfeldlab/n5/N5Writer.java index 64dc94166..22ab44667 100644 --- a/src/main/java/org/janelia/saalfeldlab/n5/N5Writer.java +++ b/src/main/java/org/janelia/saalfeldlab/n5/N5Writer.java @@ -39,9 +39,6 @@ import java.util.Map; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; -import org.janelia.saalfeldlab.n5.shard.Nesting.NestedGrid; -import org.janelia.saalfeldlab.n5.shard.Nesting.NestedPosition; -import org.janelia.saalfeldlab.n5.shard.Region; /** * A simple structured container API for hierarchies of chunked @@ -320,33 +317,13 @@ interface DataBlockSupplier { * @param writeFully if false, merge existing data in shards/blocks that overlap the region boundary. if true, override everything. * @throws N5Exception the exception */ - default void writeRegion( - String datasetPath, - DatasetAttributes datasetAttributes, - long[] min, - long[] size, - DataBlockSupplier dataBlocks, - boolean writeFully) throws N5Exception { - - final NestedGrid grid = datasetAttributes.getNestedBlockGrid(); - final Region region = new Region(min, size, grid); - for (long[] key : Region.gridPositions(region.minPos().key(), region.maxPos().key())) { - final NestedPosition pos = grid.nestedPosition(key, grid.numLevels() - 1); - final long[] gridPosition = pos.absolute(0); - final DataBlock existingDataBlock = writeFully || region.fullyContains(pos) - ? null - : readBlock(datasetPath, datasetAttributes, gridPosition); - final DataBlock dataBlock = dataBlocks.get(gridPosition, existingDataBlock); - // null blocks may be provided when they contain only the fill value - // and only non-empty blocks should be written, for example - if (dataBlock == null) { - deleteBlock(datasetPath, datasetAttributes, gridPosition); - } else { - writeBlock(datasetPath, datasetAttributes, dataBlock); - } - } - - } + void writeRegion( + final String datasetPath, + final DatasetAttributes datasetAttributes, + final long[] min, + final long[] size, + final DataBlockSupplier dataBlocks, + final boolean writeFully) throws N5Exception; /** * @param datasetPath the dataset path @@ -358,35 +335,14 @@ default void writeRegion( * @param exec used to parallelize over blocks and shards * @throws N5Exception the exception */ - default void writeRegion( + void writeRegion( String datasetPath, DatasetAttributes datasetAttributes, long[] min, long[] size, DataBlockSupplier dataBlocks, boolean writeFully, - ExecutorService exec) throws N5Exception, InterruptedException, ExecutionException { - - final NestedGrid grid = datasetAttributes.getNestedBlockGrid(); - final Region region = new Region(min, size, grid); - for (long[] key : Region.gridPositions(region.minPos().key(), region.maxPos().key())) { - exec.submit(() -> { - final NestedPosition pos = grid.nestedPosition(key, grid.numLevels() - 1); - final long[] gridPosition = pos.absolute(0); - final DataBlock existingDataBlock = writeFully || region.fullyContains(pos) - ? null - : readBlock(datasetPath, datasetAttributes, gridPosition); - final DataBlock dataBlock = dataBlocks.get(gridPosition, existingDataBlock); - // null blocks may be provided when they contain only the fill value - // and only non-empty blocks should be written, for example - if (dataBlock == null) { - deleteBlock(datasetPath, datasetAttributes, gridPosition); - } else { - writeBlock(datasetPath, datasetAttributes, dataBlock); - } - }); - } - } + ExecutorService exec) throws N5Exception, InterruptedException, ExecutionException; /** * Deletes the block at {@code gridPosition}.