Skip to content

Commit 5993588

Browse files
committed
Make copy(Interval, Object) the main PrimitiveBlocks::copy method
Other copy() signatures have default implementations.
1 parent bf2e7d8 commit 5993588

File tree

3 files changed

+37
-15
lines changed

3 files changed

+37
-15
lines changed

src/main/java/net/imglib2/blocks/FallbackPrimitiveBlocks.java

+3-5
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,14 @@
3333
*/
3434
package net.imglib2.blocks;
3535

36-
import net.imglib2.FinalInterval;
36+
import net.imglib2.Interval;
3737
import net.imglib2.RandomAccessible;
3838
import net.imglib2.img.array.ArrayImg;
3939
import net.imglib2.img.basictypeaccess.array.ArrayDataAccess;
4040
import net.imglib2.loops.LoopBuilder;
4141
import net.imglib2.type.NativeType;
4242
import net.imglib2.type.NativeTypeFactory;
4343
import net.imglib2.util.Cast;
44-
import net.imglib2.util.Util;
4544
import net.imglib2.view.Views;
4645

4746
class FallbackPrimitiveBlocks< T extends NativeType< T >, A extends ArrayDataAccess< A > > implements PrimitiveBlocks< T >
@@ -84,11 +83,10 @@ public int numDimensions()
8483
}
8584

8685
@Override
87-
public void copy( final long[] srcPos, final Object dest, final int[] size )
86+
public void copy( final Interval interval, final Object dest )
8887
{
89-
final ArrayImg< T, A > img = new ArrayImg<>( primitiveTypeProperties.wrap( dest ), Util.int2long( size ), type.getEntitiesPerPixel() );
88+
final ArrayImg< T, A > img = new ArrayImg<>( primitiveTypeProperties.wrap( dest ), interval.dimensionsAsLongArray(), type.getEntitiesPerPixel() );
9089
img.setLinkedType( nativeTypeFactory.createLinkedType( img ) );
91-
final FinalInterval interval = FinalInterval.createMinSize( srcPos, Util.int2long( size ) );
9290
LoopBuilder.setImages( Views.interval( source, interval ), img ).forEachPixel( ( a, b ) -> b.set( a ) );
9391
}
9492

src/main/java/net/imglib2/blocks/PrimitiveBlocks.java

+18-1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import static net.imglib2.blocks.PrimitiveBlocks.OnFallback.WARN;
3838

3939
import net.imglib2.EuclideanSpace;
40+
import net.imglib2.Interval;
4041
import net.imglib2.RandomAccessible;
4142
import net.imglib2.Typed;
4243
import net.imglib2.type.NativeType;
@@ -105,6 +106,19 @@
105106
*/
106107
public interface PrimitiveBlocks< T extends NativeType< T > > extends Typed< T >, EuclideanSpace
107108
{
109+
/**
110+
* Copy a block from the ({@code T}-typed) source into primitive arrays (of
111+
* the appropriate type).
112+
*
113+
* @param interval
114+
* position and size of the block to copy
115+
* @param dest
116+
* primitive array to copy into. Must correspond to {@code T}, for
117+
* example, if {@code T} is {@code UnsignedByteType} then {@code dest} must
118+
* be {@code byte[]}.
119+
*/
120+
void copy( Interval interval, Object dest );
121+
108122
/**
109123
* Copy a block from the ({@code T}-typed) source into primitive arrays (of
110124
* the appropriate type).
@@ -118,7 +132,10 @@ public interface PrimitiveBlocks< T extends NativeType< T > > extends Typed< T >
118132
* @param size
119133
* the size of the block to copy
120134
*/
121-
void copy( long[] srcPos, Object dest, int[] size );
135+
default void copy( long[] srcPos, Object dest, int[] size )
136+
{
137+
copy( BlockInterval.wrap( srcPos, size ), dest );
138+
}
122139

123140
/**
124141
* Copy a block from the ({@code T}-typed) source into primitive arrays (of

src/main/java/net/imglib2/blocks/ViewPrimitiveBlocks.java

+16-9
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737

3838
import java.util.function.Supplier;
3939

40+
import net.imglib2.Interval;
4041
import net.imglib2.img.basictypeaccess.nio.BufferAccess;
4142
import net.imglib2.transform.integer.MixedTransform;
4243
import net.imglib2.type.NativeType;
@@ -94,16 +95,22 @@ public int numDimensions()
9495
}
9596

9697
/**
97-
* @param srcPos
98-
* min coordinates of block to copy from src Img.
98+
* Copy a block from the ({@code T}-typed) source into primitive arrays (of
99+
* the appropriate type).
100+
*
101+
* @param interval
102+
* position and size of the block to copy
99103
* @param dest
100-
* destination array. Type is {@code byte[]}, {@code float[]},
101-
* etc, corresponding to the src Img's native type.
102-
* @param size
103-
* dimensions of block to copy from src Img.
104+
* primitive array to copy into. Must correspond to {@code T}, for
105+
* example, if {@code T} is {@code UnsignedByteType} then {@code dest} must
106+
* be {@code byte[]}.
104107
*/
105-
public void copy( final long[] srcPos, final Object dest, final int[] size )
108+
public void copy( final Interval interval, final Object dest )
106109
{
110+
final BlockInterval blockInterval = BlockInterval.asBlockInterval( interval );
111+
final long[] srcPos = blockInterval.min();
112+
final int[] size = blockInterval.size();
113+
107114
final long[] destPos;
108115
final int[] destSize;
109116
if ( props.hasTransform() )
@@ -185,9 +192,9 @@ public int numDimensions()
185192
}
186193

187194
@Override
188-
public void copy( final long[] srcPos, final Object dest, final int[] size )
195+
public void copy( final Interval interval, final Object dest )
189196
{
190-
threadSafeSupplier.get().copy( srcPos, dest, size );
197+
threadSafeSupplier.get().copy( interval, dest );
191198
}
192199

193200
@Override

0 commit comments

Comments
 (0)