diff --git a/pom.xml b/pom.xml
index e4eef919f..75b464d20 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,7 +11,7 @@
net.imglib2
imglib2
- 6.4.1-SNAPSHOT
+ 7.0.0-SNAPSHOT
ImgLib2 Core Library
A multidimensional, type-agnostic image processing library.
diff --git a/src/main/java/net/imglib2/IterableRealInterval.java b/src/main/java/net/imglib2/IterableRealInterval.java
index 51ea63cd2..6650e9676 100644
--- a/src/main/java/net/imglib2/IterableRealInterval.java
+++ b/src/main/java/net/imglib2/IterableRealInterval.java
@@ -60,7 +60,7 @@
*
* @author Stephan Saalfeld
*/
-public interface IterableRealInterval< T > extends RealInterval, Iterable< T >
+public interface IterableRealInterval< T > extends RealInterval, Iterable< T >, Typed< T >
{
/**
*
@@ -118,6 +118,24 @@ default T firstElement() // TODO: fix places where it is not necessary to implem
return iterator().next();
}
+ /**
+ * Get an instance of {@code T}.
+ *
+ * It should not be assumed that the returned {@code T} instance is an
+ * independent copy. In particular, repeated calls to {@code getType()} may
+ * return the same instance.
+ *
+ * The default implementation returns {@link #firstElement}. Derived classes
+ * may choose different implementations for improved performance.
+ *
+ * @return an instance of {@code T}
+ */
+ @Override
+ default T getType()
+ {
+ return firstElement();
+ }
+
/**
* Returns the iteration order of this {@link IterableRealInterval}. If the
* returned object equals ({@link Object#equals(Object)}) the iteration
diff --git a/src/main/java/net/imglib2/KDTree.java b/src/main/java/net/imglib2/KDTree.java
index fb338c832..861931f5a 100644
--- a/src/main/java/net/imglib2/KDTree.java
+++ b/src/main/java/net/imglib2/KDTree.java
@@ -136,6 +136,12 @@ public Cursor copy()
{
return new Cursor( source.copy() );
}
+
+ @Override
+ public RealLocalizable getType()
+ {
+ return source;
+ }
}
@Override
@@ -182,6 +188,12 @@ public KDTreeNode< T > getRoot()
return new KDTreeNode<>( this ).setNodeIndex( impl.root() );
}
+ @Override
+ public T getType()
+ {
+ return treeData.getType();
+ }
+
@Override
public int numDimensions()
{
@@ -232,6 +244,12 @@ public boolean hasNext()
return nodeIndex() < impl.size() - 1;
}
+ @Override
+ public T getType()
+ {
+ return treeData.getType();
+ }
+
@Override
public KDTreeCursor copy()
{
diff --git a/src/main/java/net/imglib2/KDTreeNode.java b/src/main/java/net/imglib2/KDTreeNode.java
index 5d643fca7..a393118ee 100644
--- a/src/main/java/net/imglib2/KDTreeNode.java
+++ b/src/main/java/net/imglib2/KDTreeNode.java
@@ -151,6 +151,12 @@ public T get()
return values.apply( nodeIndex );
}
+ @Override
+ public T getType()
+ {
+ return tree.getType();
+ }
+
@Override
public KDTreeNode< T > copy()
{
diff --git a/src/main/java/net/imglib2/PointSample.java b/src/main/java/net/imglib2/PointSample.java
index e2342d909..367ace36d 100644
--- a/src/main/java/net/imglib2/PointSample.java
+++ b/src/main/java/net/imglib2/PointSample.java
@@ -275,6 +275,12 @@ public T get()
return sampleSupplier.get();
}
+ @Override
+ public T getType()
+ {
+ return get();
+ }
+
@Override
public PointSample< T > copy()
{
diff --git a/src/main/java/net/imglib2/PointSampleList.java b/src/main/java/net/imglib2/PointSampleList.java
index 23b200b5f..035f07ffb 100644
--- a/src/main/java/net/imglib2/PointSampleList.java
+++ b/src/main/java/net/imglib2/PointSampleList.java
@@ -124,6 +124,12 @@ public T get()
return sample;
}
+ @Override
+ public T getType()
+ {
+ return sample;
+ }
+
@Override
public void fwd()
{
@@ -228,4 +234,10 @@ public long size()
{
return samples.size();
}
+
+ @Override
+ public T getType()
+ {
+ return samples.get( 0 );
+ }
}
diff --git a/src/main/java/net/imglib2/RandomAccessible.java b/src/main/java/net/imglib2/RandomAccessible.java
index 7cfd96bcd..e42768a23 100644
--- a/src/main/java/net/imglib2/RandomAccessible.java
+++ b/src/main/java/net/imglib2/RandomAccessible.java
@@ -62,7 +62,7 @@
* @author Stephan Saalfeld
* @author Tobias Pietzsch
*/
-public interface RandomAccessible< T > extends EuclideanSpace
+public interface RandomAccessible< T > extends EuclideanSpace, Typed< T >
{
/**
* Create a random access sampler for integer coordinates.
@@ -180,4 +180,14 @@ default T getAt( final Localizable position )
{
return randomAccess().setPositionAndGet( position );
}
+
+ /*
+ * NB: We cannot have a default implementation here because of
+ * https://bugs.openjdk.org/browse/JDK-7120669
+ */
+// @Override
+// default T getType()
+// {
+// return randomAccess().get();
+// }
}
diff --git a/src/main/java/net/imglib2/RandomAccessibleInterval.java b/src/main/java/net/imglib2/RandomAccessibleInterval.java
index d5a2834ef..84371aeb9 100644
--- a/src/main/java/net/imglib2/RandomAccessibleInterval.java
+++ b/src/main/java/net/imglib2/RandomAccessibleInterval.java
@@ -34,6 +34,8 @@
package net.imglib2;
+import net.imglib2.util.Intervals;
+
/**
*
* f:{x∈Zn|[min,max]→T}
@@ -58,6 +60,17 @@
*
*
* @author Stephan Saalfeld
+ * @author Philipp Hanslovsky
*/
public interface RandomAccessibleInterval< T > extends RandomAccessible< T >, Interval
-{}
+{
+ /*
+ * NB: We cannot have a default implementation here because of
+ * https://bugs.openjdk.org/browse/JDK-7120669
+ */
+// @Override
+// default T getType()
+// {
+// return getAt( Intervals.minAsLongArray( this ) );
+// }
+}
diff --git a/src/main/java/net/imglib2/RealPointSample.java b/src/main/java/net/imglib2/RealPointSample.java
index 1d4d934ab..5da65a2bd 100644
--- a/src/main/java/net/imglib2/RealPointSample.java
+++ b/src/main/java/net/imglib2/RealPointSample.java
@@ -333,6 +333,12 @@ public T get()
return sampleSupplier.get();
}
+ @Override
+ public T getType()
+ {
+ return get();
+ }
+
@Override
public RealPointSample< T > copy()
{
diff --git a/src/main/java/net/imglib2/RealPointSampleList.java b/src/main/java/net/imglib2/RealPointSampleList.java
index 2abde52f8..976dd529b 100644
--- a/src/main/java/net/imglib2/RealPointSampleList.java
+++ b/src/main/java/net/imglib2/RealPointSampleList.java
@@ -99,6 +99,12 @@ public T get()
return sample;
}
+ @Override
+ public T getType()
+ {
+ return sample;
+ }
+
@Override
public void fwd()
{
@@ -212,6 +218,12 @@ public long size()
return samples.size();
}
+ @Override
+ public T getType()
+ {
+ return samples.get( 0 );
+ }
+
@Override
public double realMax( final int d )
{
diff --git a/src/main/java/net/imglib2/RealRandomAccessible.java b/src/main/java/net/imglib2/RealRandomAccessible.java
index dfbd56d9f..0825ea62f 100644
--- a/src/main/java/net/imglib2/RealRandomAccessible.java
+++ b/src/main/java/net/imglib2/RealRandomAccessible.java
@@ -55,7 +55,7 @@
*
* @author Stephan Saalfeld
*/
-public interface RealRandomAccessible< T > extends EuclideanSpace
+public interface RealRandomAccessible< T > extends EuclideanSpace, Typed< T >
{
/**
* Create a random access sampler for real coordinates.
@@ -119,4 +119,14 @@ default T getAt( final RealLocalizable position )
{
return realRandomAccess().setPositionAndGet( position );
}
+
+ /*
+ * NB: We cannot have a default implementation here because of
+ * https://bugs.openjdk.org/browse/JDK-7120669
+ */
+// @Override
+// default T getType()
+// {
+// return realRandomAccess().get();
+// }
}
diff --git a/src/main/java/net/imglib2/RealRandomAccessibleRealInterval.java b/src/main/java/net/imglib2/RealRandomAccessibleRealInterval.java
index 0388e70f4..0c45b77c1 100644
--- a/src/main/java/net/imglib2/RealRandomAccessibleRealInterval.java
+++ b/src/main/java/net/imglib2/RealRandomAccessibleRealInterval.java
@@ -34,6 +34,8 @@
package net.imglib2;
+import net.imglib2.util.Intervals;
+
/**
*
* f:{x∈Rn|[min,max]→T}
@@ -60,4 +62,14 @@
* @author Stephan Saalfeld
*/
public interface RealRandomAccessibleRealInterval< T > extends RealRandomAccessible< T >, RealInterval
-{}
+{
+ /*
+ * NB: We cannot have a default implementation here because of
+ * https://bugs.openjdk.org/browse/JDK-7120669
+ */
+// @Override
+// default T getType()
+// {
+// return getAt( Intervals.minAsDoubleArray( this ) );
+// }
+}
diff --git a/src/main/java/net/imglib2/Sampler.java b/src/main/java/net/imglib2/Sampler.java
index cc5bbf6a5..d0270e734 100644
--- a/src/main/java/net/imglib2/Sampler.java
+++ b/src/main/java/net/imglib2/Sampler.java
@@ -53,7 +53,7 @@
* @author Stephan Preibisch
* @author Stephan Saalfeld
*/
-public interface Sampler< T >
+public interface Sampler< T > extends Typed< T >
{
/**
* Access the actual T instance providing access to a pixel,
@@ -73,4 +73,10 @@ public interface Sampler< T >
* {@link ArrayCursor} for example)
*/
Sampler< T > copy();
+
+ @Override
+ default T getType()
+ {
+ return get();
+ }
}
diff --git a/src/main/java/net/imglib2/Typed.java b/src/main/java/net/imglib2/Typed.java
new file mode 100644
index 000000000..429646338
--- /dev/null
+++ b/src/main/java/net/imglib2/Typed.java
@@ -0,0 +1,15 @@
+package net.imglib2;
+
+public interface Typed< T >
+{
+ /**
+ * Get an instance of {@code T}.
+ *
+ * It should not be assumed that the returned {@code T} instance is an
+ * independent copy. In particular, repeated calls to {@code getType()} may
+ * return the same instance.
+ *
+ * @return an instance of {@code T}
+ */
+ T getType();
+}
diff --git a/src/main/java/net/imglib2/converter/Converters.java b/src/main/java/net/imglib2/converter/Converters.java
index b4a818c95..af10bab10 100644
--- a/src/main/java/net/imglib2/converter/Converters.java
+++ b/src/main/java/net/imglib2/converter/Converters.java
@@ -106,7 +106,7 @@ public static < A, B extends Type< B > > RandomAccessible< B > convert(
final Converter< ? super A, ? super B > converter,
final B b )
{
- return convert2( source, converter, () -> b.copy() );
+ return convert2( source, converter, () -> b.createVariable() );
}
/**
@@ -156,7 +156,7 @@ public static < A, B extends Type< B > > RandomAccessible< B > convert(
final Supplier< Converter< ? super A, ? super B > > converterSupplier,
final B b )
{
- return convert2( source, converterSupplier, () -> b.copy() );
+ return convert2( source, converterSupplier, () -> b.createVariable() );
}
/**
@@ -239,7 +239,7 @@ public static < A, B extends Type< B > > RandomAccessibleInterval< B > convert(
final Converter< ? super A, ? super B > converter,
final B b )
{
- return convert2( source, converter, () -> b.copy() );
+ return convert2( source, converter, () -> b.createVariable() );
}
/**
@@ -290,7 +290,7 @@ public static < A, B extends Type< B > > RandomAccessibleInterval< B > convert(
final Supplier< Converter< ? super A, ? super B > > converterSupplier,
final B b )
{
- return convert2( source, converterSupplier, () -> b.copy() );
+ return convert2( source, converterSupplier, () -> b.createVariable() );
}
/**
@@ -514,7 +514,7 @@ public static < A, B extends Type< B > > IterableRealInterval< B > convert(
final Converter< ? super A, ? super B > converter,
final B b )
{
- return convert2( source, converter, () -> b.copy() );
+ return convert2( source, converter, () -> b.createVariable() );
}
/**
@@ -562,7 +562,7 @@ public static < A, B extends Type< B > > IterableRealInterval< B > convert(
final Supplier< Converter< ? super A, ? super B > > converterSupplier,
final B b )
{
- return convert2( source, converterSupplier, () -> b.copy() );
+ return convert2( source, converterSupplier, () -> b.createVariable() );
}
/**
@@ -631,7 +631,7 @@ public static < A, B extends Type< B > > IterableInterval< B > convert(
final Converter< ? super A, ? super B > converter,
final B b )
{
- return convert2( source, converter, () -> b.copy() );
+ return convert2( source, converter, () -> b.createVariable() );
}
/**
@@ -679,7 +679,7 @@ public static < A, B extends Type< B > > IterableInterval< B > convert(
final Supplier< Converter< ? super A, ? super B > > converterSupplier,
final B b )
{
- return convert2( source, converterSupplier, () -> b.copy() );
+ return convert2( source, converterSupplier, () -> b.createVariable() );
}
/**
@@ -816,7 +816,7 @@ public static < A, B extends Type< B > > RealRandomAccessibleRealInterval< B > c
final Converter< ? super A, ? super B > converter,
final B b )
{
- return convert2( source, converter, () -> b.copy() );
+ return convert2( source, converter, () -> b.createVariable() );
}
/**
@@ -866,7 +866,7 @@ public static < A, B extends Type< B > > RealRandomAccessibleRealInterval< B > c
final Supplier< Converter< ? super A, ? super B > > converterSupplier,
final B b )
{
- return convert2( source, converterSupplier, () -> b.copy() );
+ return convert2( source, converterSupplier, () -> b.createVariable() );
}
/**
@@ -913,7 +913,7 @@ public static < A, B extends Type< B > > RealRandomAccessible< B > convert(
final Converter< ? super A, ? super B > converter,
final B b )
{
- return convert2( source, converter, () -> b.copy() );
+ return convert2( source, converter, () -> b.createVariable() );
}
/**
@@ -963,7 +963,7 @@ public static < A, B extends Type< B > > RealRandomAccessible< B > convert(
final Supplier< Converter< ? super A, ? super B > > converterSupplier,
final B b )
{
- return convert2( source, converterSupplier, () -> b.copy() );
+ return convert2( source, converterSupplier, () -> b.createVariable() );
}
/**
@@ -1132,7 +1132,7 @@ public static < A extends RealType< A >, B extends Type< B > > RandomAccessibleI
return composeReal2(
components,
composer,
- () -> targetType.copy() );
+ () -> targetType.createVariable() );
}
/**
@@ -1181,7 +1181,7 @@ public static < A extends NumericType< A >, B extends Type< B > > RandomAccessib
return composeNumeric2(
components,
composer,
- () -> targetType.copy() );
+ () -> targetType.createVariable() );
}
/**
@@ -1230,7 +1230,7 @@ public static < A, B extends Type< B > > RandomAccessibleInterval< B > compose(
return compose2(
components,
composer,
- () -> targetType.copy() );
+ () -> targetType.createVariable() );
}
/**
@@ -1282,7 +1282,7 @@ public static < A, B, C extends Type< C > > RandomAccessible< C > convert(
final BiConverter< ? super A, ? super B, ? super C > converter,
final C c )
{
- return convert2( sourceA, sourceB, converter, () -> c.copy() );
+ return convert2( sourceA, sourceB, converter, () -> c.createVariable() );
}
/**
@@ -1337,7 +1337,7 @@ public static < A, B, C extends Type< C > > RandomAccessible< C > convert(
final Supplier< BiConverter< ? super A, ? super B, ? super C > > converterSupplier,
final C c )
{
- return convert2( sourceA, sourceB, converterSupplier, () -> c.copy() );
+ return convert2( sourceA, sourceB, converterSupplier, () -> c.createVariable() );
}
/**
@@ -1392,7 +1392,7 @@ public static < A, B, C extends Type< C > > RandomAccessibleInterval< C > conver
final BiConverter< ? super A, ? super B, ? super C > converter,
final C c )
{
- return convert2( sourceA, sourceB, converter, () -> c.copy() );
+ return convert2( sourceA, sourceB, converter, () -> c.createVariable() );
}
/**
@@ -1447,7 +1447,7 @@ public static < A, B, C extends Type< C > > RandomAccessibleInterval< C > conver
final Supplier< BiConverter< ? super A, ? super B, ? super C > > converterSupplier,
final C c )
{
- return convert2( sourceA, sourceB, converterSupplier, () -> c.copy() );
+ return convert2( sourceA, sourceB, converterSupplier, () -> c.createVariable() );
}
/**
@@ -1635,7 +1635,7 @@ public static < A, B, C extends Type< C > > IterableInterval< C > convert(
final BiConverter< ? super A, ? super B, ? super C > converter,
final C c )
{
- return convert2( sourceA, sourceB, converter, () -> c.copy() );
+ return convert2( sourceA, sourceB, converter, () -> c.createVariable() );
}
/**
@@ -1688,7 +1688,7 @@ public static < A, B, C extends Type< C > > IterableInterval< C > convert(
final Supplier< BiConverter< ? super A, ? super B, ? super C > > converterSupplier,
final C c )
{
- return convert2( sourceA, sourceB, converterSupplier, () -> c.copy() );
+ return convert2( sourceA, sourceB, converterSupplier, () -> c.createVariable() );
}
/**
@@ -1741,7 +1741,7 @@ public static < A, B, C extends Type< C > > IterableRealInterval< C > convert(
final BiConverter< ? super A, ? super B, ? super C > converter,
final C c )
{
- return convert2( sourceA, sourceB, converter, () -> c.copy() );
+ return convert2( sourceA, sourceB, converter, () -> c.createVariable() );
}
/**
@@ -1794,7 +1794,7 @@ public static < A, B, C extends Type< C > > IterableRealInterval< C > convert(
final Supplier< BiConverter< ? super A, ? super B, ? super C > > converterSupplier,
final C c )
{
- return convert2( sourceA, sourceB, converterSupplier, () -> c.copy() );
+ return convert2( sourceA, sourceB, converterSupplier, () -> c.createVariable() );
}
/**
@@ -1848,7 +1848,7 @@ public static < A, B, C extends Type< C > > RealRandomAccessibleRealInterval< C
final BiConverter< ? super A, ? super B, ? super C > converter,
final C c )
{
- return convert2( sourceA, sourceB, converter, () -> c.copy() );
+ return convert2( sourceA, sourceB, converter, () -> c.createVariable() );
}
/**
@@ -1903,7 +1903,7 @@ public static < A, B, C extends Type< C > > RealRandomAccessibleRealInterval< C
final Supplier< BiConverter< ? super A, ? super B, ? super C > > converterSupplier,
final C c )
{
- return convert2( sourceA, sourceB, converterSupplier, () -> c.copy() );
+ return convert2( sourceA, sourceB, converterSupplier, () -> c.createVariable() );
}
/**
@@ -1958,7 +1958,7 @@ public static < A, B, C extends Type< C > > RealRandomAccessible< C > convert(
final BiConverter< ? super A, ? super B, ? super C > converter,
final C c )
{
- return convert2( sourceA, sourceB, converter, () -> c.copy() );
+ return convert2( sourceA, sourceB, converter, () -> c.createVariable() );
}
/**
@@ -2013,7 +2013,7 @@ public static < A, B, C extends Type< C > > RealRandomAccessible< C > convert(
final Supplier< BiConverter< ? super A, ? super B, ? super C > > converterSupplier,
final C c )
{
- return convert2( sourceA, sourceB, converterSupplier, () -> c.copy() );
+ return convert2( sourceA, sourceB, converterSupplier, () -> c.createVariable() );
}
/**
diff --git a/src/main/java/net/imglib2/converter/RealTypeConverters.java b/src/main/java/net/imglib2/converter/RealTypeConverters.java
index ffef87658..7c3600157 100644
--- a/src/main/java/net/imglib2/converter/RealTypeConverters.java
+++ b/src/main/java/net/imglib2/converter/RealTypeConverters.java
@@ -44,7 +44,6 @@
import net.imglib2.type.numeric.integer.UnsignedByteType;
import net.imglib2.type.numeric.real.FloatType;
import net.imglib2.util.Intervals;
-import net.imglib2.util.Util;
import net.imglib2.view.IntervalView;
import net.imglib2.view.Views;
@@ -74,8 +73,8 @@ public static void copyFromTo(
)
{
IntervalView< ? extends RealType< ? > > sourceInterval = Views.interval( source, destination );
- RealType< ? > s = Util.getTypeFromInterval( sourceInterval );
- RealType< ? > d = Util.getTypeFromInterval( destination );
+ RealType< ? > s = sourceInterval.getType();
+ RealType< ? > d = destination.getType();
Converter< RealType< ? >, RealType< ? > > copy = getConverter( s, d );
boolean useMultiThreading = Intervals.numElements(destination) >= 20_000;
LoopBuilder.setImages( sourceInterval, destination ).multiThreaded( useMultiThreading ).forEachPixel( copy::convert );
@@ -102,7 +101,7 @@ public static < T extends RealType< T > > RandomAccessibleInterval< T > convert(
RandomAccessibleInterval< ? extends RealType< ? > > image,
T pixelType )
{
- RealType< ? > in = Util.getTypeFromInterval( image );
+ RealType< ? > in = image.getType();
Converter< RealType< ? >, T > converter = getConverter( in, pixelType );
return Converters.convert( image, converter, pixelType );
}
diff --git a/src/main/java/net/imglib2/converter/read/BiConvertedCursor.java b/src/main/java/net/imglib2/converter/read/BiConvertedCursor.java
index 8d525a149..c55476833 100644
--- a/src/main/java/net/imglib2/converter/read/BiConvertedCursor.java
+++ b/src/main/java/net/imglib2/converter/read/BiConvertedCursor.java
@@ -95,6 +95,12 @@ public C get()
return converted;
}
+ @Override
+ public C getType()
+ {
+ return converted;
+ }
+
@Override
public void jumpFwd( final long steps )
{
diff --git a/src/main/java/net/imglib2/converter/read/BiConvertedIterableInterval.java b/src/main/java/net/imglib2/converter/read/BiConvertedIterableInterval.java
index 42f715fe8..7c2b1a203 100644
--- a/src/main/java/net/imglib2/converter/read/BiConvertedIterableInterval.java
+++ b/src/main/java/net/imglib2/converter/read/BiConvertedIterableInterval.java
@@ -137,6 +137,11 @@ public C getDestinationType()
return convertedSupplier;
}
+ @Override
+ public C getType()
+ {
+ return convertedSupplier.get();
+ }
/**
* Returns an instance of the {@link BiConverter}. If the
diff --git a/src/main/java/net/imglib2/converter/read/BiConvertedIterableRealInterval.java b/src/main/java/net/imglib2/converter/read/BiConvertedIterableRealInterval.java
index 4f40c84e3..7f4a30379 100644
--- a/src/main/java/net/imglib2/converter/read/BiConvertedIterableRealInterval.java
+++ b/src/main/java/net/imglib2/converter/read/BiConvertedIterableRealInterval.java
@@ -127,6 +127,11 @@ public C getDestinationType()
return convertedSupplier;
}
+ @Override
+ public C getType()
+ {
+ return convertedSupplier.get();
+ }
/**
* Returns an instance of the {@link BiConverter}. If the
diff --git a/src/main/java/net/imglib2/converter/read/BiConvertedRandomAccess.java b/src/main/java/net/imglib2/converter/read/BiConvertedRandomAccess.java
index 072bed266..5b0ef9ed7 100644
--- a/src/main/java/net/imglib2/converter/read/BiConvertedRandomAccess.java
+++ b/src/main/java/net/imglib2/converter/read/BiConvertedRandomAccess.java
@@ -172,6 +172,12 @@ public C get()
return converted;
}
+ @Override
+ public C getType()
+ {
+ return converted;
+ }
+
@Override
public BiConvertedRandomAccess< A, B, C > copy()
{
diff --git a/src/main/java/net/imglib2/converter/read/BiConvertedRandomAccessible.java b/src/main/java/net/imglib2/converter/read/BiConvertedRandomAccessible.java
index a0cf96747..d3ca3b0d1 100644
--- a/src/main/java/net/imglib2/converter/read/BiConvertedRandomAccessible.java
+++ b/src/main/java/net/imglib2/converter/read/BiConvertedRandomAccessible.java
@@ -132,4 +132,10 @@ public C getDestinationType()
{
return converterSupplier;
}
+
+ @Override
+ public C getType()
+ {
+ return convertedSupplier.get();
+ }
}
diff --git a/src/main/java/net/imglib2/converter/read/BiConvertedRandomAccessibleInterval.java b/src/main/java/net/imglib2/converter/read/BiConvertedRandomAccessibleInterval.java
index aab5c1771..33ca1ff0f 100644
--- a/src/main/java/net/imglib2/converter/read/BiConvertedRandomAccessibleInterval.java
+++ b/src/main/java/net/imglib2/converter/read/BiConvertedRandomAccessibleInterval.java
@@ -141,4 +141,10 @@ public C getDestinationType()
{
return converterSupplier;
}
+
+ @Override
+ public C getType()
+ {
+ return convertedSupplier.get();
+ }
}
diff --git a/src/main/java/net/imglib2/converter/read/BiConvertedRealCursor.java b/src/main/java/net/imglib2/converter/read/BiConvertedRealCursor.java
index 69504c317..2f7b37247 100644
--- a/src/main/java/net/imglib2/converter/read/BiConvertedRealCursor.java
+++ b/src/main/java/net/imglib2/converter/read/BiConvertedRealCursor.java
@@ -105,6 +105,12 @@ public C get()
return converted;
}
+ @Override
+ public C getType()
+ {
+ return converted;
+ }
+
@Override
public void jumpFwd( final long steps )
{
diff --git a/src/main/java/net/imglib2/converter/read/BiConvertedRealRandomAccess.java b/src/main/java/net/imglib2/converter/read/BiConvertedRealRandomAccess.java
index 8bfd2885a..3a9a91e3b 100644
--- a/src/main/java/net/imglib2/converter/read/BiConvertedRealRandomAccess.java
+++ b/src/main/java/net/imglib2/converter/read/BiConvertedRealRandomAccess.java
@@ -88,6 +88,12 @@ public C get()
return converted;
}
+ @Override
+ public C getType()
+ {
+ return converted;
+ }
+
@Override
public void fwd( final int d )
{
diff --git a/src/main/java/net/imglib2/converter/read/BiConvertedRealRandomAccessible.java b/src/main/java/net/imglib2/converter/read/BiConvertedRealRandomAccessible.java
index ffb04aec5..97ba1c98b 100644
--- a/src/main/java/net/imglib2/converter/read/BiConvertedRealRandomAccessible.java
+++ b/src/main/java/net/imglib2/converter/read/BiConvertedRealRandomAccessible.java
@@ -115,6 +115,11 @@ public C getDestinationType()
return convertedSupplier;
}
+ @Override
+ public C getType()
+ {
+ return convertedSupplier.get();
+ }
/**
* Returns an instance of the {@link BiConverter}. If the
diff --git a/src/main/java/net/imglib2/converter/read/BiConvertedRealRandomAccessibleRealInterval.java b/src/main/java/net/imglib2/converter/read/BiConvertedRealRandomAccessibleRealInterval.java
index 2b16881cc..663a7f440 100644
--- a/src/main/java/net/imglib2/converter/read/BiConvertedRealRandomAccessibleRealInterval.java
+++ b/src/main/java/net/imglib2/converter/read/BiConvertedRealRandomAccessibleRealInterval.java
@@ -116,6 +116,11 @@ public C getDestinationType()
return convertedSupplier;
}
+ @Override
+ public C getType()
+ {
+ return convertedSupplier.get();
+ }
/**
* Returns an instance of the {@link BiConverter}. If the
diff --git a/src/main/java/net/imglib2/converter/read/ConvertedCursor.java b/src/main/java/net/imglib2/converter/read/ConvertedCursor.java
index 368f87ce2..bc2144aa6 100644
--- a/src/main/java/net/imglib2/converter/read/ConvertedCursor.java
+++ b/src/main/java/net/imglib2/converter/read/ConvertedCursor.java
@@ -93,6 +93,12 @@ public B get()
return converted;
}
+ @Override
+ public B getType()
+ {
+ return converted;
+ }
+
@Override
public ConvertedCursor< A, B > copy()
{
diff --git a/src/main/java/net/imglib2/converter/read/ConvertedIterableInterval.java b/src/main/java/net/imglib2/converter/read/ConvertedIterableInterval.java
index 3230f7490..9cb531043 100644
--- a/src/main/java/net/imglib2/converter/read/ConvertedIterableInterval.java
+++ b/src/main/java/net/imglib2/converter/read/ConvertedIterableInterval.java
@@ -113,6 +113,11 @@ public B getDestinationType()
return convertedSupplier;
}
+ @Override
+ public B getType()
+ {
+ return convertedSupplier.get();
+ }
/**
* Returns an instance of the {@link Converter}. If the
diff --git a/src/main/java/net/imglib2/converter/read/ConvertedIterableRealInterval.java b/src/main/java/net/imglib2/converter/read/ConvertedIterableRealInterval.java
index 25e5d87ba..49847583e 100644
--- a/src/main/java/net/imglib2/converter/read/ConvertedIterableRealInterval.java
+++ b/src/main/java/net/imglib2/converter/read/ConvertedIterableRealInterval.java
@@ -114,6 +114,11 @@ public B getDestinationType()
return convertedSupplier;
}
+ @Override
+ public B getType()
+ {
+ return convertedSupplier.get();
+ }
/**
* Returns an instance of the {@link Converter}. If the
diff --git a/src/main/java/net/imglib2/converter/read/ConvertedRandomAccess.java b/src/main/java/net/imglib2/converter/read/ConvertedRandomAccess.java
index 16de74a21..c9aed77b8 100644
--- a/src/main/java/net/imglib2/converter/read/ConvertedRandomAccess.java
+++ b/src/main/java/net/imglib2/converter/read/ConvertedRandomAccess.java
@@ -95,6 +95,12 @@ public B get()
return converted;
}
+ @Override
+ public B getType()
+ {
+ return converted;
+ }
+
@Override
public ConvertedRandomAccess< A, B > copy()
{
diff --git a/src/main/java/net/imglib2/converter/read/ConvertedRandomAccessible.java b/src/main/java/net/imglib2/converter/read/ConvertedRandomAccessible.java
index b0cd812c2..53fce0d9a 100644
--- a/src/main/java/net/imglib2/converter/read/ConvertedRandomAccessible.java
+++ b/src/main/java/net/imglib2/converter/read/ConvertedRandomAccessible.java
@@ -102,6 +102,11 @@ public B getDestinationType()
return convertedSupplier;
}
+ @Override
+ public B getType()
+ {
+ return convertedSupplier.get();
+ }
/**
* Returns an instance of the {@link Converter}. If the
diff --git a/src/main/java/net/imglib2/converter/read/ConvertedRandomAccessibleInterval.java b/src/main/java/net/imglib2/converter/read/ConvertedRandomAccessibleInterval.java
index 6c4606ca8..9e94710d7 100644
--- a/src/main/java/net/imglib2/converter/read/ConvertedRandomAccessibleInterval.java
+++ b/src/main/java/net/imglib2/converter/read/ConvertedRandomAccessibleInterval.java
@@ -128,4 +128,10 @@ public B getDestinationType()
{
return converterSupplier;
}
+
+ @Override
+ public B getType()
+ {
+ return convertedSupplier.get();
+ }
}
diff --git a/src/main/java/net/imglib2/converter/read/ConvertedRealCursor.java b/src/main/java/net/imglib2/converter/read/ConvertedRealCursor.java
index e45afc602..e72fffd95 100644
--- a/src/main/java/net/imglib2/converter/read/ConvertedRealCursor.java
+++ b/src/main/java/net/imglib2/converter/read/ConvertedRealCursor.java
@@ -97,6 +97,12 @@ public B get()
return converted;
}
+ @Override
+ public B getType()
+ {
+ return converted;
+ }
+
@Override
public ConvertedRealCursor< A, B > copy()
{
diff --git a/src/main/java/net/imglib2/converter/read/ConvertedRealRandomAccess.java b/src/main/java/net/imglib2/converter/read/ConvertedRealRandomAccess.java
index 4ff54732a..d69593d0c 100644
--- a/src/main/java/net/imglib2/converter/read/ConvertedRealRandomAccess.java
+++ b/src/main/java/net/imglib2/converter/read/ConvertedRealRandomAccess.java
@@ -89,6 +89,12 @@ public B get()
return converted;
}
+ @Override
+ public B getType()
+ {
+ return converted;
+ }
+
@Override
public ConvertedRealRandomAccess< A, B > copy()
{
diff --git a/src/main/java/net/imglib2/converter/read/ConvertedRealRandomAccessible.java b/src/main/java/net/imglib2/converter/read/ConvertedRealRandomAccessible.java
index b50500601..3591a489d 100644
--- a/src/main/java/net/imglib2/converter/read/ConvertedRealRandomAccessible.java
+++ b/src/main/java/net/imglib2/converter/read/ConvertedRealRandomAccessible.java
@@ -102,6 +102,11 @@ public B getDestinationType()
return convertedSupplier;
}
+ @Override
+ public B getType()
+ {
+ return convertedSupplier.get();
+ }
/**
* Returns an instance of the {@link Converter}. If the
diff --git a/src/main/java/net/imglib2/converter/read/ConvertedRealRandomAccessibleRealInterval.java b/src/main/java/net/imglib2/converter/read/ConvertedRealRandomAccessibleRealInterval.java
index 1eb7c28b6..0e78f0203 100644
--- a/src/main/java/net/imglib2/converter/read/ConvertedRealRandomAccessibleRealInterval.java
+++ b/src/main/java/net/imglib2/converter/read/ConvertedRealRandomAccessibleRealInterval.java
@@ -103,6 +103,11 @@ public B getDestinationType()
return convertedSupplier;
}
+ @Override
+ public B getType()
+ {
+ return convertedSupplier.get();
+ }
/**
* Returns an instance of the {@link Converter}. If the
diff --git a/src/main/java/net/imglib2/converter/readwrite/TypeUtils.java b/src/main/java/net/imglib2/converter/readwrite/TypeUtils.java
new file mode 100644
index 000000000..1960e2190
--- /dev/null
+++ b/src/main/java/net/imglib2/converter/readwrite/TypeUtils.java
@@ -0,0 +1,45 @@
+package net.imglib2.converter.readwrite;
+
+import java.util.function.Supplier;
+
+import net.imglib2.Sampler;
+
+/**
+ * Helper method for implementing Typed::getType
+ */
+class TypeUtils
+{
+ public static < A, B > B getConvertedType( A sourceType, Supplier< SamplerConverter< ? super A, B > > converterSupplier )
+ {
+ return converterSupplier.get().convert( new ConstantSampler<>( sourceType ) );
+ }
+
+ private static class ConstantSampler< T > implements Sampler< T >
+ {
+
+ private final T t;
+
+ public ConstantSampler( T t )
+ {
+ this.t = t;
+ }
+
+ @Override
+ public T get()
+ {
+ return t;
+ }
+
+ @Override
+ public T getType() // TODO GET-TYPE: just use default implementation
+ {
+ return t;
+ }
+
+ @Override
+ public Sampler< T > copy()
+ {
+ return new ConstantSampler<>( t );
+ }
+ }
+}
diff --git a/src/main/java/net/imglib2/converter/readwrite/WriteConvertedCursor.java b/src/main/java/net/imglib2/converter/readwrite/WriteConvertedCursor.java
index 053ad440f..3436a10eb 100644
--- a/src/main/java/net/imglib2/converter/readwrite/WriteConvertedCursor.java
+++ b/src/main/java/net/imglib2/converter/readwrite/WriteConvertedCursor.java
@@ -74,6 +74,12 @@ public B get()
return converted;
}
+ @Override
+ public B getType()
+ {
+ return converted;
+ }
+
@Override
public WriteConvertedCursor< A, B > copy()
{
diff --git a/src/main/java/net/imglib2/converter/readwrite/WriteConvertedIterableInterval.java b/src/main/java/net/imglib2/converter/readwrite/WriteConvertedIterableInterval.java
index 70ed5a3cf..85202974f 100644
--- a/src/main/java/net/imglib2/converter/readwrite/WriteConvertedIterableInterval.java
+++ b/src/main/java/net/imglib2/converter/readwrite/WriteConvertedIterableInterval.java
@@ -71,4 +71,10 @@ public WriteConvertedCursor< A, B > localizingCursor()
{
return new WriteConvertedCursor< A, B >( sourceInterval.localizingCursor(), converterSupplier );
}
+
+ @Override
+ public B getType()
+ {
+ return TypeUtils.getConvertedType( getSource().getType(), converterSupplier );
+ }
}
diff --git a/src/main/java/net/imglib2/converter/readwrite/WriteConvertedIterableRandomAccessibleInterval.java b/src/main/java/net/imglib2/converter/readwrite/WriteConvertedIterableRandomAccessibleInterval.java
index a2e5489fc..ddfb63fe8 100644
--- a/src/main/java/net/imglib2/converter/readwrite/WriteConvertedIterableRandomAccessibleInterval.java
+++ b/src/main/java/net/imglib2/converter/readwrite/WriteConvertedIterableRandomAccessibleInterval.java
@@ -87,4 +87,10 @@ public WriteConvertedCursor< A, B > localizingCursor()
{
return new WriteConvertedCursor< A, B >( sourceInterval.localizingCursor(), converterSupplier );
}
+
+ @Override
+ public B getType()
+ {
+ return TypeUtils.getConvertedType( getSource().getType(), converterSupplier );
+ }
}
diff --git a/src/main/java/net/imglib2/converter/readwrite/WriteConvertedIterableRealInterval.java b/src/main/java/net/imglib2/converter/readwrite/WriteConvertedIterableRealInterval.java
index 5a02af6a7..9118139b0 100644
--- a/src/main/java/net/imglib2/converter/readwrite/WriteConvertedIterableRealInterval.java
+++ b/src/main/java/net/imglib2/converter/readwrite/WriteConvertedIterableRealInterval.java
@@ -73,4 +73,10 @@ public WriteConvertedRealCursor< A, B > localizingCursor()
{
return new WriteConvertedRealCursor< A, B >( sourceInterval.localizingCursor(), converterSupplier );
}
+
+ @Override
+ public B getType()
+ {
+ return TypeUtils.getConvertedType( getSource().getType(), converterSupplier );
+ }
}
diff --git a/src/main/java/net/imglib2/converter/readwrite/WriteConvertedRandomAccess.java b/src/main/java/net/imglib2/converter/readwrite/WriteConvertedRandomAccess.java
index 0d920f784..77fcd3c71 100644
--- a/src/main/java/net/imglib2/converter/readwrite/WriteConvertedRandomAccess.java
+++ b/src/main/java/net/imglib2/converter/readwrite/WriteConvertedRandomAccess.java
@@ -74,6 +74,12 @@ public B get()
return converted;
}
+ @Override
+ public B getType()
+ {
+ return converted;
+ }
+
@Override
public WriteConvertedRandomAccess< A, B > copy()
{
diff --git a/src/main/java/net/imglib2/converter/readwrite/WriteConvertedRandomAccessible.java b/src/main/java/net/imglib2/converter/readwrite/WriteConvertedRandomAccessible.java
index 0d9f4f71e..fccbd38b0 100644
--- a/src/main/java/net/imglib2/converter/readwrite/WriteConvertedRandomAccessible.java
+++ b/src/main/java/net/imglib2/converter/readwrite/WriteConvertedRandomAccessible.java
@@ -74,4 +74,10 @@ public WriteConvertedRandomAccess< A, B > randomAccess( final Interval interval
{
return new WriteConvertedRandomAccess< A, B >( source.randomAccess( interval ), converterSupplier );
}
+
+ @Override
+ public B getType()
+ {
+ return TypeUtils.getConvertedType( getSource().getType(), converterSupplier );
+ }
}
diff --git a/src/main/java/net/imglib2/converter/readwrite/WriteConvertedRandomAccessibleInterval.java b/src/main/java/net/imglib2/converter/readwrite/WriteConvertedRandomAccessibleInterval.java
index 00f6fc42a..4df4b7329 100644
--- a/src/main/java/net/imglib2/converter/readwrite/WriteConvertedRandomAccessibleInterval.java
+++ b/src/main/java/net/imglib2/converter/readwrite/WriteConvertedRandomAccessibleInterval.java
@@ -74,4 +74,10 @@ public WriteConvertedRandomAccess< A, B > randomAccess( final Interval interval
{
return new WriteConvertedRandomAccess< A, B >( sourceInterval.randomAccess( interval ), converterSupplier );
}
+
+ @Override
+ public B getType()
+ {
+ return TypeUtils.getConvertedType( getSource().getType(), converterSupplier );
+ }
}
diff --git a/src/main/java/net/imglib2/converter/readwrite/WriteConvertedRealCursor.java b/src/main/java/net/imglib2/converter/readwrite/WriteConvertedRealCursor.java
index 153d4f502..eaf185239 100644
--- a/src/main/java/net/imglib2/converter/readwrite/WriteConvertedRealCursor.java
+++ b/src/main/java/net/imglib2/converter/readwrite/WriteConvertedRealCursor.java
@@ -74,6 +74,12 @@ public B get()
return converted;
}
+ @Override
+ public B getType()
+ {
+ return converted;
+ }
+
@Override
public WriteConvertedRealCursor< A, B > copy()
{
diff --git a/src/main/java/net/imglib2/display/projector/sampler/IntervalSampler.java b/src/main/java/net/imglib2/display/projector/sampler/IntervalSampler.java
index 92683a9e7..21a94b6ec 100644
--- a/src/main/java/net/imglib2/display/projector/sampler/IntervalSampler.java
+++ b/src/main/java/net/imglib2/display/projector/sampler/IntervalSampler.java
@@ -88,6 +88,12 @@ public T get()
return m_source.get();
}
+ @Override
+ public T getType()
+ {
+ return m_source.getType();
+ }
+
@Override
public Sampler< T > copy()
{
diff --git a/src/main/java/net/imglib2/display/projector/sampler/SelectiveSampler.java b/src/main/java/net/imglib2/display/projector/sampler/SelectiveSampler.java
index 46919509a..02fd19ae9 100644
--- a/src/main/java/net/imglib2/display/projector/sampler/SelectiveSampler.java
+++ b/src/main/java/net/imglib2/display/projector/sampler/SelectiveSampler.java
@@ -93,6 +93,12 @@ public T get()
return m_source.get();
}
+ @Override
+ public T getType()
+ {
+ return m_source.getType();
+ }
+
@Override
public Sampler< T > copy()
{
diff --git a/src/main/java/net/imglib2/histogram/DiscreteFrequencyDistribution.java b/src/main/java/net/imglib2/histogram/DiscreteFrequencyDistribution.java
index 67c23cc71..30f402c61 100644
--- a/src/main/java/net/imglib2/histogram/DiscreteFrequencyDistribution.java
+++ b/src/main/java/net/imglib2/histogram/DiscreteFrequencyDistribution.java
@@ -366,4 +366,9 @@ public DiscreteFrequencyDistribution copy()
return new DiscreteFrequencyDistribution( counts.copy() );
}
+ @Override
+ public LongType getType() {
+ return new LongType();
+ }
+
}
diff --git a/src/main/java/net/imglib2/histogram/Histogram1d.java b/src/main/java/net/imglib2/histogram/Histogram1d.java
index df763b7e4..c6ce51171 100644
--- a/src/main/java/net/imglib2/histogram/Histogram1d.java
+++ b/src/main/java/net/imglib2/histogram/Histogram1d.java
@@ -721,6 +721,10 @@ public Histogram1d< T > copy()
return new Histogram1d< T >( this );
}
+ public LongType getType() {
+ return new LongType();
+ }
+
// -- helpers --
private void reset()
diff --git a/src/main/java/net/imglib2/histogram/HistogramNd.java b/src/main/java/net/imglib2/histogram/HistogramNd.java
index f9826fc4a..2710ee9f8 100644
--- a/src/main/java/net/imglib2/histogram/HistogramNd.java
+++ b/src/main/java/net/imglib2/histogram/HistogramNd.java
@@ -1020,6 +1020,11 @@ public HistogramNd< T > copy()
return new HistogramNd< T >( this );
}
+ @Override
+ public LongType getType() {
+ return new LongType();
+ }
+
// -- helpers --
private void reset()
diff --git a/src/main/java/net/imglib2/img/AbstractNativeImg.java b/src/main/java/net/imglib2/img/AbstractNativeImg.java
index 3597ffda0..2f446479c 100644
--- a/src/main/java/net/imglib2/img/AbstractNativeImg.java
+++ b/src/main/java/net/imglib2/img/AbstractNativeImg.java
@@ -42,6 +42,7 @@
*
* @author Stephan Preibisch
* @author Stephan Saalfeld
+ * @author Philipp Hanslovsky
*/
public abstract class AbstractNativeImg< T extends NativeType< T >, A >
extends AbstractImg< T >
@@ -77,4 +78,10 @@ public T createLinkedType()
return null;
}
}
+
+ @Override
+ public T getType()
+ {
+ return linkedType;
+ }
}
diff --git a/src/main/java/net/imglib2/img/ImgView.java b/src/main/java/net/imglib2/img/ImgView.java
index b4443a87e..242fb7502 100644
--- a/src/main/java/net/imglib2/img/ImgView.java
+++ b/src/main/java/net/imglib2/img/ImgView.java
@@ -176,7 +176,7 @@ public static < T extends Type< T > > Img< T > wrap( final RandomAccessibleInter
return ( Img< T > ) accessible;
else
{
- final T type = Util.getTypeFromInterval( accessible );
+ final T type = accessible.getType();
final ImgFactory< T > factory = Util.getSuitableImgFactory( accessible, type );
return wrap( accessible, factory );
}
diff --git a/src/main/java/net/imglib2/img/array/AbstractArrayCursor.java b/src/main/java/net/imglib2/img/array/AbstractArrayCursor.java
index dbf5ccd66..465043968 100644
--- a/src/main/java/net/imglib2/img/array/AbstractArrayCursor.java
+++ b/src/main/java/net/imglib2/img/array/AbstractArrayCursor.java
@@ -128,6 +128,12 @@ public T get()
return type;
}
+ @Override
+ public T getType()
+ {
+ return type;
+ }
+
@Override
public boolean hasNext()
{
diff --git a/src/main/java/net/imglib2/img/array/AbstractArrayLocalizingCursor.java b/src/main/java/net/imglib2/img/array/AbstractArrayLocalizingCursor.java
index c0ae1cf52..1cf4422fd 100644
--- a/src/main/java/net/imglib2/img/array/AbstractArrayLocalizingCursor.java
+++ b/src/main/java/net/imglib2/img/array/AbstractArrayLocalizingCursor.java
@@ -151,6 +151,12 @@ public T get()
return type;
}
+ @Override
+ public T getType()
+ {
+ return type;
+ }
+
/**
* {@inheritDoc}
*/
diff --git a/src/main/java/net/imglib2/img/array/ArrayLocalizingSpliterator.java b/src/main/java/net/imglib2/img/array/ArrayLocalizingSpliterator.java
index ef763c4fc..343193464 100644
--- a/src/main/java/net/imglib2/img/array/ArrayLocalizingSpliterator.java
+++ b/src/main/java/net/imglib2/img/array/ArrayLocalizingSpliterator.java
@@ -178,4 +178,10 @@ public T get()
{
return type;
}
+
+ @Override
+ public T getType()
+ {
+ return type;
+ }
}
diff --git a/src/main/java/net/imglib2/img/array/ArrayRandomAccess.java b/src/main/java/net/imglib2/img/array/ArrayRandomAccess.java
index b397d2fa3..9220c7dc9 100644
--- a/src/main/java/net/imglib2/img/array/ArrayRandomAccess.java
+++ b/src/main/java/net/imglib2/img/array/ArrayRandomAccess.java
@@ -96,6 +96,12 @@ public T get()
return type;
}
+ @Override
+ public T getType()
+ {
+ return type;
+ }
+
@Override
public void fwd( final int d )
{
diff --git a/src/main/java/net/imglib2/img/array/ArraySpliterator.java b/src/main/java/net/imglib2/img/array/ArraySpliterator.java
index 027822f51..a411ae1c2 100644
--- a/src/main/java/net/imglib2/img/array/ArraySpliterator.java
+++ b/src/main/java/net/imglib2/img/array/ArraySpliterator.java
@@ -135,6 +135,11 @@ public T get()
return type;
}
+ @Override
+ public T getType()
+ {
+ return type;
+ }
// -----------------------------------------------------------
diff --git a/src/main/java/net/imglib2/img/cell/CellCursor.java b/src/main/java/net/imglib2/img/cell/CellCursor.java
index fbc7a261e..1805feffc 100644
--- a/src/main/java/net/imglib2/img/cell/CellCursor.java
+++ b/src/main/java/net/imglib2/img/cell/CellCursor.java
@@ -111,6 +111,12 @@ public T get()
return type;
}
+ @Override
+ public T getType()
+ {
+ return type;
+ }
+
@Override
public CellCursor< T, C > copy()
{
diff --git a/src/main/java/net/imglib2/img/cell/CellGrid.java b/src/main/java/net/imglib2/img/cell/CellGrid.java
index 6292ddbbc..3456a5b9a 100644
--- a/src/main/java/net/imglib2/img/cell/CellGrid.java
+++ b/src/main/java/net/imglib2/img/cell/CellGrid.java
@@ -685,6 +685,12 @@ public Interval get()
return interval;
}
+ @Override
+ public Interval getType()
+ {
+ return interval;
+ }
+
CellIntervalsRA()
{
super( CellGrid.this.n );
@@ -759,6 +765,12 @@ public FlatIterationOrder iterationOrder()
{
return new FlatIterationOrder( this );
}
+
+ @Override
+ public Interval getType()
+ {
+ return new FinalInterval();
+ }
}
private final CellIntervals cellIntervals;
diff --git a/src/main/java/net/imglib2/img/cell/CellLocalizingCursor.java b/src/main/java/net/imglib2/img/cell/CellLocalizingCursor.java
index 046ea3903..0cbb9929c 100644
--- a/src/main/java/net/imglib2/img/cell/CellLocalizingCursor.java
+++ b/src/main/java/net/imglib2/img/cell/CellLocalizingCursor.java
@@ -116,6 +116,12 @@ public T get()
return type;
}
+ @Override
+ public T getType()
+ {
+ return type;
+ }
+
@Override
public CellLocalizingCursor< T, C > copy()
{
diff --git a/src/main/java/net/imglib2/img/cell/CellRandomAccess.java b/src/main/java/net/imglib2/img/cell/CellRandomAccess.java
index e419df79c..4e39a9cba 100644
--- a/src/main/java/net/imglib2/img/cell/CellRandomAccess.java
+++ b/src/main/java/net/imglib2/img/cell/CellRandomAccess.java
@@ -139,6 +139,12 @@ public T get()
return type;
}
+ @Override
+ public T getType()
+ {
+ return type;
+ }
+
@Override
public CellRandomAccess< T, C > copy()
{
diff --git a/src/main/java/net/imglib2/img/cell/CellSpliterator.java b/src/main/java/net/imglib2/img/cell/CellSpliterator.java
index 1d4a67ad5..10286d6ee 100644
--- a/src/main/java/net/imglib2/img/cell/CellSpliterator.java
+++ b/src/main/java/net/imglib2/img/cell/CellSpliterator.java
@@ -221,6 +221,12 @@ public T get()
return type;
}
+ @Override
+ public T getType()
+ {
+ return type;
+ }
+
@Override
public String toString()
{
diff --git a/src/main/java/net/imglib2/img/cell/LazyCellImg.java b/src/main/java/net/imglib2/img/cell/LazyCellImg.java
index 87d95c959..af5fba1ec 100644
--- a/src/main/java/net/imglib2/img/cell/LazyCellImg.java
+++ b/src/main/java/net/imglib2/img/cell/LazyCellImg.java
@@ -65,7 +65,7 @@ public interface Get< T >
public LazyCellImg( final CellGrid grid, final T type, final Get< Cell< A > > get )
{
- super( grid, new LazyCells<>( grid.getGridDimensions(), get ), type.getEntitiesPerPixel() );
+ super( grid, new LazyCells<>( grid.getGridDimensions(), get, typeCell() ), type.getEntitiesPerPixel() );
@SuppressWarnings( "unchecked" )
final NativeTypeFactory< T, ? super A > typeFactory = ( NativeTypeFactory< T, ? super A > ) type.getNativeTypeFactory();
@@ -74,7 +74,15 @@ public LazyCellImg( final CellGrid grid, final T type, final Get< Cell< A > > ge
public LazyCellImg( final CellGrid grid, final Fraction entitiesPerPixel, final Get< Cell< A > > get )
{
- super( grid, new LazyCells<>( grid.getGridDimensions(), get ), entitiesPerPixel );
+ super( grid, new LazyCells<>( grid.getGridDimensions(), get, typeCell() ), entitiesPerPixel );
+ }
+
+ /**
+ * Create a dummy Cell instance to be returned by {@code LazyCells.getType()}.
+ */
+ private static < A > Cell< A > typeCell()
+ {
+ return new Cell<>( new int[] { 0 }, new long[] { 0 }, null );
}
@Override
@@ -89,14 +97,17 @@ public Img< T > copy()
throw new UnsupportedOperationException( "not implemented yet" );
}
- public static final class LazyCells< T > extends AbstractLongListImg< T >
+ public static final class LazyCells< T extends Cell< ? > > extends AbstractLongListImg< T >
{
private final Get< T > get;
- public LazyCells( final long[] dimensions, final Get< T > get )
+ private final T type;
+
+ public LazyCells( final long[] dimensions, final Get< T > get, final T type )
{
super( dimensions );
this.get = get;
+ this.type = type;
}
@Override
@@ -105,6 +116,12 @@ protected T get( final long index )
return get.get( index );
}
+ @Override
+ public T getType()
+ {
+ return type;
+ }
+
@Override
protected void set( final long index, final T value )
{
diff --git a/src/main/java/net/imglib2/img/list/AbstractLongListImg.java b/src/main/java/net/imglib2/img/list/AbstractLongListImg.java
index 1f3c34658..c861c5058 100644
--- a/src/main/java/net/imglib2/img/list/AbstractLongListImg.java
+++ b/src/main/java/net/imglib2/img/list/AbstractLongListImg.java
@@ -98,6 +98,12 @@ public T get()
return AbstractLongListImg.this.get( i );
}
+ @Override
+ public T getType()
+ {
+ return AbstractLongListImg.this.getType();
+ }
+
public void set( final T t )
{
AbstractLongListImg.this.set( i, t );
@@ -223,6 +229,12 @@ public T get()
return AbstractLongListImg.this.get( i );
}
+ @Override
+ public T getType()
+ {
+ return AbstractLongListImg.this.getType();
+ }
+
public void set( final T t )
{
AbstractLongListImg.this.set( i, t );
@@ -262,6 +274,12 @@ public T get()
return AbstractLongListImg.this.get( i );
}
+ @Override
+ public T getType()
+ {
+ return AbstractLongListImg.this.getType();
+ }
+
public void set( final T t )
{
AbstractLongListImg.this.set( i, t );
diff --git a/src/main/java/net/imglib2/img/list/ListCursor.java b/src/main/java/net/imglib2/img/list/ListCursor.java
index f96a86523..ed8087769 100644
--- a/src/main/java/net/imglib2/img/list/ListCursor.java
+++ b/src/main/java/net/imglib2/img/list/ListCursor.java
@@ -82,6 +82,12 @@ public T get()
return img.get( i );
}
+ @Override
+ public T getType()
+ {
+ return img.getType();
+ }
+
public void set( final T t )
{
img.set( i, t );
diff --git a/src/main/java/net/imglib2/img/list/ListImg.java b/src/main/java/net/imglib2/img/list/ListImg.java
index 0801cf091..52ad73738 100644
--- a/src/main/java/net/imglib2/img/list/ListImg.java
+++ b/src/main/java/net/imglib2/img/list/ListImg.java
@@ -11,13 +11,13 @@
* %%
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
- *
+ *
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
- *
+ *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -46,7 +46,7 @@
* pixel is stored as an individual object, so {@link ListImg} should only be
* used for images with relatively few pixels. In principle, the number of
* entities stored is limited to {@link Integer#MAX_VALUE}.
- *
+ *
* @param
* The value type of the pixels. You can us {@link Type}s or
* arbitrary {@link Object}s. If you use non-{@link Type} pixels,
@@ -55,20 +55,22 @@
* {@link ListCursor#set(Object)} and
* {@link ListRandomAccess#set(Object)} methods to alter the
* underlying {@link ArrayList}.
- *
+ *
* @author Stephan Preibisch
* @author Stephan Saalfeld
* @author Tobias Pietzsch
*/
public class ListImg< T > extends AbstractListImg< T >
{
- final private List< T > pixels;
+ private final List< T > pixels;
+
+ private final T type;
public ListImg( final long[] dim, final T type )
{
super( dim );
+ this.type = type;
pixels = new ArrayList< T >( ( int ) numPixels );
-
if ( type instanceof Type< ? > )
{
final Type< ? > t = ( Type< ? > ) type;
@@ -84,14 +86,17 @@ public ListImg( final long[] dim, final T type )
}
}
- public ListImg( final Collection< T > collection, final long... dim )
+ public ListImg( final T type, final Collection< T > collection, final long... dim )
{
super( dim );
-
+ this.type = type;
assert numPixels == collection.size() : "Dimensions do not match number of pixels.";
+ pixels = new ArrayList<>( collection );
+ }
- pixels = new ArrayList< T >( ( int ) numPixels );
- pixels.addAll( collection );
+ public ListImg( final Collection< T > collection, final long... dim )
+ {
+ this( collection.iterator().next(), collection, dim );
}
@Override
@@ -100,6 +105,12 @@ protected T get( final int index )
return pixels.get( index );
}
+ @Override
+ public T getType()
+ {
+ return type;
+ }
+
@Override
protected void set( final int index, final T value )
{
@@ -108,7 +119,7 @@ protected void set( final int index, final T value )
private static < A extends Type< A > > ListImg< A > copyWithType( final ListImg< A > img )
{
- final ListImg< A > copy = new ListImg< A >( img.dimension, img.firstElement().createVariable() );
+ final ListImg< A > copy = new ListImg<>( img.dimension, img.type );
final ListCursor< A > source = img.cursor();
final ListCursor< A > target = copy.cursor();
@@ -123,19 +134,18 @@ private static < A extends Type< A > > ListImg< A > copyWithType( final ListImg<
@Override
public ListImg< T > copy()
{
- final T type = firstElement();
if ( type instanceof Type< ? > )
{
final ListImg< ? > copy = copyWithType( ( ListImg< Type > ) this );
return ( ListImg< T > ) copy;
}
- return new ListImg< T >( this.pixels, dimension );
+ return new ListImg<>( this.type, this.pixels, dimension );
}
private ListImg( final List< T > pixels, final boolean dummy, final long... dim )
{
super( dim );
-
+ this.type = pixels.isEmpty() ? null : pixels.get( 0 );
assert numPixels == pixels.size() : "Dimensions do not match number of pixels.";
this.pixels = pixels;
}
diff --git a/src/main/java/net/imglib2/img/list/ListLocalizingCursor.java b/src/main/java/net/imglib2/img/list/ListLocalizingCursor.java
index c16f00723..c72f496dc 100644
--- a/src/main/java/net/imglib2/img/list/ListLocalizingCursor.java
+++ b/src/main/java/net/imglib2/img/list/ListLocalizingCursor.java
@@ -129,6 +129,12 @@ public T get()
return img.get( i );
}
+ @Override
+ public T getType()
+ {
+ return img.getType();
+ }
+
public void set( final T t )
{
img.set( i, t );
diff --git a/src/main/java/net/imglib2/img/list/ListRandomAccess.java b/src/main/java/net/imglib2/img/list/ListRandomAccess.java
index 692cbb5e1..e5983624a 100644
--- a/src/main/java/net/imglib2/img/list/ListRandomAccess.java
+++ b/src/main/java/net/imglib2/img/list/ListRandomAccess.java
@@ -81,6 +81,12 @@ public T get()
return img.get( i );
}
+ @Override
+ public T getType()
+ {
+ return img.getType();
+ }
+
public void set( final T t )
{
img.set( i, t );
diff --git a/src/main/java/net/imglib2/img/planar/PlanarCursor.java b/src/main/java/net/imglib2/img/planar/PlanarCursor.java
index ca22cef76..97d616b30 100644
--- a/src/main/java/net/imglib2/img/planar/PlanarCursor.java
+++ b/src/main/java/net/imglib2/img/planar/PlanarCursor.java
@@ -107,6 +107,12 @@ public T get()
return type;
}
+ @Override
+ public T getType()
+ {
+ return type;
+ }
+
@Override
public PlanarCursor< T > copy()
{
diff --git a/src/main/java/net/imglib2/img/planar/PlanarLocalizingCursor.java b/src/main/java/net/imglib2/img/planar/PlanarLocalizingCursor.java
index fc1c08ea7..602cefca5 100644
--- a/src/main/java/net/imglib2/img/planar/PlanarLocalizingCursor.java
+++ b/src/main/java/net/imglib2/img/planar/PlanarLocalizingCursor.java
@@ -125,6 +125,12 @@ public T get()
return type;
}
+ @Override
+ public T getType()
+ {
+ return type;
+ }
+
@Override
public PlanarLocalizingCursor< T > copy()
{
diff --git a/src/main/java/net/imglib2/img/planar/PlanarPlaneSubsetCursor.java b/src/main/java/net/imglib2/img/planar/PlanarPlaneSubsetCursor.java
index 5d4f2644f..c1526d428 100644
--- a/src/main/java/net/imglib2/img/planar/PlanarPlaneSubsetCursor.java
+++ b/src/main/java/net/imglib2/img/planar/PlanarPlaneSubsetCursor.java
@@ -142,6 +142,12 @@ public final T get()
return type;
}
+ @Override
+ public T getType()
+ {
+ return type;
+ }
+
/**
* {@inheritDoc}
*/
diff --git a/src/main/java/net/imglib2/img/planar/PlanarPlaneSubsetLocalizingCursor.java b/src/main/java/net/imglib2/img/planar/PlanarPlaneSubsetLocalizingCursor.java
index bcb1f96bd..a664c7be4 100644
--- a/src/main/java/net/imglib2/img/planar/PlanarPlaneSubsetLocalizingCursor.java
+++ b/src/main/java/net/imglib2/img/planar/PlanarPlaneSubsetLocalizingCursor.java
@@ -153,6 +153,12 @@ public final T get()
return type;
}
+ @Override
+ public T getType()
+ {
+ return type;
+ }
+
/**
* {@inheritDoc}
*/
diff --git a/src/main/java/net/imglib2/img/planar/PlanarRandomAccess.java b/src/main/java/net/imglib2/img/planar/PlanarRandomAccess.java
index f6f273fc0..cf4f0e3c2 100644
--- a/src/main/java/net/imglib2/img/planar/PlanarRandomAccess.java
+++ b/src/main/java/net/imglib2/img/planar/PlanarRandomAccess.java
@@ -103,6 +103,12 @@ public T get()
return type;
}
+ @Override
+ public T getType()
+ {
+ return type;
+ }
+
@Override
public PlanarRandomAccess< T > copy()
{
diff --git a/src/main/java/net/imglib2/img/planar/PlanarSpliterator.java b/src/main/java/net/imglib2/img/planar/PlanarSpliterator.java
index bd9339438..915dc4816 100644
--- a/src/main/java/net/imglib2/img/planar/PlanarSpliterator.java
+++ b/src/main/java/net/imglib2/img/planar/PlanarSpliterator.java
@@ -209,6 +209,11 @@ public T get()
return type;
}
+ @Override
+ public T getType()
+ {
+ return type;
+ }
diff --git a/src/main/java/net/imglib2/img/sparse/NtreeCursor.java b/src/main/java/net/imglib2/img/sparse/NtreeCursor.java
index 28e587db5..afb431e68 100644
--- a/src/main/java/net/imglib2/img/sparse/NtreeCursor.java
+++ b/src/main/java/net/imglib2/img/sparse/NtreeCursor.java
@@ -83,6 +83,12 @@ public T get()
return type;
}
+ @Override
+ public T getType()
+ {
+ return type;
+ }
+
@Override
public NtreeCursor< T > copy()
{
diff --git a/src/main/java/net/imglib2/img/sparse/NtreeRandomAccess.java b/src/main/java/net/imglib2/img/sparse/NtreeRandomAccess.java
index 457d58d46..c88a1df30 100644
--- a/src/main/java/net/imglib2/img/sparse/NtreeRandomAccess.java
+++ b/src/main/java/net/imglib2/img/sparse/NtreeRandomAccess.java
@@ -125,6 +125,12 @@ public T get()
return type;
}
+ @Override
+ public T getType()
+ {
+ return type;
+ }
+
@Override
public NtreeRandomAccess< T > copy()
{
diff --git a/src/main/java/net/imglib2/interpolation/Interpolant.java b/src/main/java/net/imglib2/interpolation/Interpolant.java
index 7d3724b1e..e2b6eb3ee 100644
--- a/src/main/java/net/imglib2/interpolation/Interpolant.java
+++ b/src/main/java/net/imglib2/interpolation/Interpolant.java
@@ -109,6 +109,12 @@ public F getSource()
return source;
}
+ @Override
+ public T getType()
+ {
+ return realRandomAccess().getType(); // TODO: this could be better, if InterpolatorFactory would implement getType()
+ }
+
/**
* @return {@link InterpolatorFactory} used for interpolation
*/
diff --git a/src/main/java/net/imglib2/interpolation/neighborsearch/InverseDistanceWeightingInterpolator.java b/src/main/java/net/imglib2/interpolation/neighborsearch/InverseDistanceWeightingInterpolator.java
index 2d98ed3b6..4890de540 100644
--- a/src/main/java/net/imglib2/interpolation/neighborsearch/InverseDistanceWeightingInterpolator.java
+++ b/src/main/java/net/imglib2/interpolation/neighborsearch/InverseDistanceWeightingInterpolator.java
@@ -84,7 +84,7 @@ public InverseDistanceWeightingInterpolator( final KNearestNeighborSearch< T > s
p2 = p / 2.0;
search.search( this );
- this.value = search.getSampler( 0 ).get().copy();
+ this.value = search.getSampler( 0 ).getType().createVariable();
this.numNeighbors = search.getK();
}
@@ -121,6 +121,12 @@ public T get()
return value;
}
+ @Override
+ public T getType()
+ {
+ return value;
+ }
+
protected double computeWeight( final double squareDistance )
{
return 1.0 / Math.pow( squareDistance, p2 );
diff --git a/src/main/java/net/imglib2/interpolation/neighborsearch/NearestNeighborSearchInterpolator.java b/src/main/java/net/imglib2/interpolation/neighborsearch/NearestNeighborSearchInterpolator.java
index 745835a8e..0c4f05ce8 100644
--- a/src/main/java/net/imglib2/interpolation/neighborsearch/NearestNeighborSearchInterpolator.java
+++ b/src/main/java/net/imglib2/interpolation/neighborsearch/NearestNeighborSearchInterpolator.java
@@ -62,6 +62,12 @@ public T get()
return search.getSampler().get();
}
+ @Override
+ public T getType()
+ {
+ return search.getSampler().getType(); // TODO GET-TYPE: getSampler() might return null, it would be better if NearestNeighborSearch had getType()
+ }
+
@Override
public NearestNeighborSearchInterpolator< T > copy()
{
diff --git a/src/main/java/net/imglib2/interpolation/randomaccess/ClampingNLinearInterpolatorFactory.java b/src/main/java/net/imglib2/interpolation/randomaccess/ClampingNLinearInterpolatorFactory.java
index 2c7235f27..18de89013 100644
--- a/src/main/java/net/imglib2/interpolation/randomaccess/ClampingNLinearInterpolatorFactory.java
+++ b/src/main/java/net/imglib2/interpolation/randomaccess/ClampingNLinearInterpolatorFactory.java
@@ -11,13 +11,13 @@
* %%
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
- *
+ *
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
- *
+ *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -56,7 +56,7 @@ public class ClampingNLinearInterpolatorFactory< T extends NumericType< T > > im
@Override
public RealRandomAccess< T > create( final RandomAccessible< T > randomAccessible )
{
- final T type = randomAccessible.randomAccess().get();
+ final T type = randomAccessible.getType();
if ( type instanceof RealType )
{
if ( type instanceof Volatile )
diff --git a/src/main/java/net/imglib2/interpolation/randomaccess/FloorInterpolator.java b/src/main/java/net/imglib2/interpolation/randomaccess/FloorInterpolator.java
index f13662290..ca804b7f3 100644
--- a/src/main/java/net/imglib2/interpolation/randomaccess/FloorInterpolator.java
+++ b/src/main/java/net/imglib2/interpolation/randomaccess/FloorInterpolator.java
@@ -79,6 +79,12 @@ public T get()
return target.get();
}
+ @Override
+ public T getType()
+ {
+ return target.getType();
+ }
+
@Override
public FloorInterpolator< T > copy()
{
diff --git a/src/main/java/net/imglib2/interpolation/randomaccess/LanczosInterpolator.java b/src/main/java/net/imglib2/interpolation/randomaccess/LanczosInterpolator.java
index e6f0eb13a..333e63620 100644
--- a/src/main/java/net/imglib2/interpolation/randomaccess/LanczosInterpolator.java
+++ b/src/main/java/net/imglib2/interpolation/randomaccess/LanczosInterpolator.java
@@ -208,6 +208,12 @@ else if ( convolved > maxValue )
return interpolatedValue;
}
+ @Override
+ public T getType()
+ {
+ return interpolatedValue;
+ }
+
private static final double lanczos( final double x, final double a )
{
if ( x == 0 )
@@ -226,6 +232,6 @@ final private double lookUpLanczos( final double x )
@Override
public RealRandomAccess< T > copy()
{
- return copy();
+ return new LanczosInterpolator<>( this );
}
}
diff --git a/src/main/java/net/imglib2/interpolation/randomaccess/NLinearInterpolator.java b/src/main/java/net/imglib2/interpolation/randomaccess/NLinearInterpolator.java
index 1ab544d70..3a6f328db 100644
--- a/src/main/java/net/imglib2/interpolation/randomaccess/NLinearInterpolator.java
+++ b/src/main/java/net/imglib2/interpolation/randomaccess/NLinearInterpolator.java
@@ -208,6 +208,12 @@ public T get()
return accumulator;
}
+ @Override
+ public T getType()
+ {
+ return accumulator;
+ }
+
@Override
public NLinearInterpolator< T > copy()
{
diff --git a/src/main/java/net/imglib2/interpolation/randomaccess/NearestNeighborInterpolator.java b/src/main/java/net/imglib2/interpolation/randomaccess/NearestNeighborInterpolator.java
index b5815f358..b2ce92339 100644
--- a/src/main/java/net/imglib2/interpolation/randomaccess/NearestNeighborInterpolator.java
+++ b/src/main/java/net/imglib2/interpolation/randomaccess/NearestNeighborInterpolator.java
@@ -82,6 +82,12 @@ public T get()
return target.get();
}
+ @Override
+ public T getType()
+ {
+ return target.getType();
+ }
+
@Override
public NearestNeighborInterpolator< T > copy()
{
diff --git a/src/main/java/net/imglib2/interpolation/stack/NearestNeighborRealRandomAccessibleStackInterpolator.java b/src/main/java/net/imglib2/interpolation/stack/NearestNeighborRealRandomAccessibleStackInterpolator.java
index bc00e372e..872c38f8f 100644
--- a/src/main/java/net/imglib2/interpolation/stack/NearestNeighborRealRandomAccessibleStackInterpolator.java
+++ b/src/main/java/net/imglib2/interpolation/stack/NearestNeighborRealRandomAccessibleStackInterpolator.java
@@ -490,6 +490,12 @@ public T get()
return sliceAccess.get();
}
+ @Override
+ public T getType()
+ {
+ return sliceAccesses[ 0 ].getType();
+ }
+
@Override
public NearestNeighborRealRandomAccessibleStackInterpolator< T > copy()
{
diff --git a/src/main/java/net/imglib2/outofbounds/AbstractOutOfBoundsMirror.java b/src/main/java/net/imglib2/outofbounds/AbstractOutOfBoundsMirror.java
index d5cc54b9e..5d57170a7 100644
--- a/src/main/java/net/imglib2/outofbounds/AbstractOutOfBoundsMirror.java
+++ b/src/main/java/net/imglib2/outofbounds/AbstractOutOfBoundsMirror.java
@@ -162,6 +162,12 @@ public T get()
return outOfBoundsRandomAccess.get();
}
+ @Override
+ public T getType()
+ {
+ return outOfBoundsRandomAccess.getType();
+ }
+
@Override
abstract public AbstractOutOfBoundsMirror< T > copy();
diff --git a/src/main/java/net/imglib2/outofbounds/AbstractOutOfBoundsValue.java b/src/main/java/net/imglib2/outofbounds/AbstractOutOfBoundsValue.java
index b788288f0..c679de8bf 100644
--- a/src/main/java/net/imglib2/outofbounds/AbstractOutOfBoundsValue.java
+++ b/src/main/java/net/imglib2/outofbounds/AbstractOutOfBoundsValue.java
@@ -90,6 +90,12 @@ public < F extends Interval & RandomAccessible< T > > AbstractOutOfBoundsValue(
dimIsOutOfBounds = new boolean[ n ];
}
+ @Override
+ public T getType()
+ {
+ return sampler.getType();
+ }
+
final private void checkOutOfBounds()
{
for ( int d = 0; d < n; ++d )
diff --git a/src/main/java/net/imglib2/outofbounds/OutOfBoundsBorder.java b/src/main/java/net/imglib2/outofbounds/OutOfBoundsBorder.java
index e595e73ff..d7369462d 100644
--- a/src/main/java/net/imglib2/outofbounds/OutOfBoundsBorder.java
+++ b/src/main/java/net/imglib2/outofbounds/OutOfBoundsBorder.java
@@ -137,6 +137,12 @@ public T get()
return outOfBoundsRandomAccess.get();
}
+ @Override
+ public T getType()
+ {
+ return outOfBoundsRandomAccess.getType();
+ }
+
@Override
final public OutOfBoundsBorder< T > copy()
{
diff --git a/src/main/java/net/imglib2/outofbounds/OutOfBoundsMirrorExpWindowing.java b/src/main/java/net/imglib2/outofbounds/OutOfBoundsMirrorExpWindowing.java
index 9dd04e792..e0ca432bd 100644
--- a/src/main/java/net/imglib2/outofbounds/OutOfBoundsMirrorExpWindowing.java
+++ b/src/main/java/net/imglib2/outofbounds/OutOfBoundsMirrorExpWindowing.java
@@ -81,7 +81,7 @@ public < F extends Interval & RandomAccessible< T > > OutOfBoundsMirrorExpWindow
* Sun javac fails to infer return types, so make it explicit, see
* https://bugs.eclipse.org/bugs/show_bug.cgi?id=98379
*/
- this.type = Util.< T, F >getTypeFromInterval( f ).createVariable();
+ this.type = f.getType().createVariable();
this.fadeOutDistance = fadeOutDistance;
this.exponent = exponent;
this.max = new long[ n ];
diff --git a/src/main/java/net/imglib2/outofbounds/OutOfBoundsPeriodic.java b/src/main/java/net/imglib2/outofbounds/OutOfBoundsPeriodic.java
index 953459331..009d81bfc 100644
--- a/src/main/java/net/imglib2/outofbounds/OutOfBoundsPeriodic.java
+++ b/src/main/java/net/imglib2/outofbounds/OutOfBoundsPeriodic.java
@@ -160,6 +160,12 @@ public T get()
return outOfBoundsRandomAccess.get();
}
+ @Override
+ public T getType()
+ {
+ return outOfBoundsRandomAccess.getType();
+ }
+
@Override
final public OutOfBoundsPeriodic< T > copy()
{
diff --git a/src/main/java/net/imglib2/outofbounds/OutOfBoundsRandomValue.java b/src/main/java/net/imglib2/outofbounds/OutOfBoundsRandomValue.java
index 1a50c28cf..2f0f644d0 100644
--- a/src/main/java/net/imglib2/outofbounds/OutOfBoundsRandomValue.java
+++ b/src/main/java/net/imglib2/outofbounds/OutOfBoundsRandomValue.java
@@ -60,7 +60,7 @@ protected OutOfBoundsRandomValue( final OutOfBoundsRandomValue< T > outOfBounds
{
super( outOfBounds );
- this.value = outOfBounds.value.copy();
+ this.value = outOfBounds.value.createVariable();
this.minValue = outOfBounds.minValue;
this.maxValue = outOfBounds.maxValue;
this.range = outOfBounds.range;
diff --git a/src/main/java/net/imglib2/outofbounds/OutOfBoundsRandomValueFactory.java b/src/main/java/net/imglib2/outofbounds/OutOfBoundsRandomValueFactory.java
index b8f11f7db..51bf5877f 100644
--- a/src/main/java/net/imglib2/outofbounds/OutOfBoundsRandomValueFactory.java
+++ b/src/main/java/net/imglib2/outofbounds/OutOfBoundsRandomValueFactory.java
@@ -78,6 +78,6 @@ public void setRandom( final Random rnd )
@Override
public OutOfBoundsRandomValue< T > create( final F f )
{
- return new OutOfBoundsRandomValue< T >( f, value.copy(), rnd, min, max );
+ return new OutOfBoundsRandomValue< T >( f, value.createVariable(), rnd, min, max );
}
}
diff --git a/src/main/java/net/imglib2/outofbounds/RealOutOfBoundsRealRandomAccess.java b/src/main/java/net/imglib2/outofbounds/RealOutOfBoundsRealRandomAccess.java
index d2ef7e1e8..0b0c9116b 100644
--- a/src/main/java/net/imglib2/outofbounds/RealOutOfBoundsRealRandomAccess.java
+++ b/src/main/java/net/imglib2/outofbounds/RealOutOfBoundsRealRandomAccess.java
@@ -91,6 +91,12 @@ public T get()
return outOfBounds.get();
}
+ @Override
+ public T getType()
+ {
+ return outOfBounds.getType();
+ }
+
@Override
public RealOutOfBoundsRealRandomAccess< T > copy()
{
diff --git a/src/main/java/net/imglib2/position/FunctionRandomAccessible.java b/src/main/java/net/imglib2/position/FunctionRandomAccessible.java
index ebab8dce2..025a820b0 100644
--- a/src/main/java/net/imglib2/position/FunctionRandomAccessible.java
+++ b/src/main/java/net/imglib2/position/FunctionRandomAccessible.java
@@ -85,6 +85,12 @@ public T get()
return t;
}
+ @Override
+ public T getType()
+ {
+ return t;
+ }
+
@Override
public FunctionRandomAccess copy()
{
@@ -103,4 +109,9 @@ public FunctionRandomAccess randomAccess( final Interval interval )
{
return randomAccess();
}
+
+ @Override
+ public T getType() {
+ return super.typeSupplier.get();
+ }
}
diff --git a/src/main/java/net/imglib2/position/FunctionRealRandomAccessible.java b/src/main/java/net/imglib2/position/FunctionRealRandomAccessible.java
index 867d59641..5b3eafc53 100644
--- a/src/main/java/net/imglib2/position/FunctionRealRandomAccessible.java
+++ b/src/main/java/net/imglib2/position/FunctionRealRandomAccessible.java
@@ -84,6 +84,12 @@ public T get()
return t;
}
+ @Override
+ public T getType()
+ {
+ return t;
+ }
+
@Override
public RealFunctionRealRandomAccess copy()
{
@@ -91,6 +97,12 @@ public RealFunctionRealRandomAccess copy()
}
}
+ @Override
+ public T getType()
+ {
+ return typeSupplier.get();
+ }
+
@Override
public RealFunctionRealRandomAccess realRandomAccess()
{
diff --git a/src/main/java/net/imglib2/position/PositionRandomAccessible.java b/src/main/java/net/imglib2/position/PositionRandomAccessible.java
index 9f24aaa8a..49dfaaf82 100644
--- a/src/main/java/net/imglib2/position/PositionRandomAccessible.java
+++ b/src/main/java/net/imglib2/position/PositionRandomAccessible.java
@@ -78,6 +78,12 @@ public LongType get()
return t;
}
+ @Override
+ public LongType getType()
+ {
+ return t;
+ }
+
@Override
public PositionRandomAccess copy()
{
@@ -102,4 +108,9 @@ public RandomAccess< LongType > randomAccess( final Interval interval )
{
return randomAccess();
}
+
+ @Override
+ public LongType getType() {
+ return new LongType();
+ }
}
diff --git a/src/main/java/net/imglib2/position/RealPositionRealRandomAccessible.java b/src/main/java/net/imglib2/position/RealPositionRealRandomAccessible.java
index 34f231272..236be9ab1 100644
--- a/src/main/java/net/imglib2/position/RealPositionRealRandomAccessible.java
+++ b/src/main/java/net/imglib2/position/RealPositionRealRandomAccessible.java
@@ -78,6 +78,12 @@ public DoubleType get()
return t;
}
+ @Override
+ public DoubleType getType()
+ {
+ return t;
+ }
+
@Override
public RealPositionRealRandomAccess copy()
{
@@ -102,4 +108,10 @@ public RealPositionRealRandomAccess realRandomAccess( final RealInterval interva
{
return realRandomAccess();
}
+
+ @Override
+ public DoubleType getType()
+ {
+ return new DoubleType();
+ }
}
diff --git a/src/main/java/net/imglib2/stream/CursorSpliterator.java b/src/main/java/net/imglib2/stream/CursorSpliterator.java
index f60f8f47f..725bd1f64 100644
--- a/src/main/java/net/imglib2/stream/CursorSpliterator.java
+++ b/src/main/java/net/imglib2/stream/CursorSpliterator.java
@@ -139,6 +139,12 @@ public T get()
return cursor.get();
}
+ @Override
+ public T getType()
+ {
+ return cursor.getType();
+ }
+
@Override
public CursorSpliterator< T > copy()
{
diff --git a/src/main/java/net/imglib2/stream/LocalizableSamplerWrapper.java b/src/main/java/net/imglib2/stream/LocalizableSamplerWrapper.java
index c501a3fe7..0298136d1 100644
--- a/src/main/java/net/imglib2/stream/LocalizableSamplerWrapper.java
+++ b/src/main/java/net/imglib2/stream/LocalizableSamplerWrapper.java
@@ -69,6 +69,12 @@ public T get()
return delegate.get();
}
+ @Override
+ public T getType()
+ {
+ return delegate.getType();
+ }
+
@Override
public LocalizableSamplerWrapper< T > copy()
{
diff --git a/src/main/java/net/imglib2/stream/RealCursorSpliterator.java b/src/main/java/net/imglib2/stream/RealCursorSpliterator.java
index 31dc76260..58088a592 100644
--- a/src/main/java/net/imglib2/stream/RealCursorSpliterator.java
+++ b/src/main/java/net/imglib2/stream/RealCursorSpliterator.java
@@ -137,6 +137,12 @@ public T get()
return cursor.get();
}
+ @Override
+ public T getType()
+ {
+ return cursor.getType();
+ }
+
@Override
public RealCursorSpliterator< T > copy()
{
diff --git a/src/main/java/net/imglib2/stream/RealLocalizableSamplerWrapper.java b/src/main/java/net/imglib2/stream/RealLocalizableSamplerWrapper.java
index bbee16526..59dbc3670 100644
--- a/src/main/java/net/imglib2/stream/RealLocalizableSamplerWrapper.java
+++ b/src/main/java/net/imglib2/stream/RealLocalizableSamplerWrapper.java
@@ -68,6 +68,12 @@ public T get()
return delegate.get();
}
+ @Override
+ public T getType()
+ {
+ return delegate.getType();
+ }
+
@Override
public RealLocalizableSamplerWrapper< T > copy()
{
diff --git a/src/main/java/net/imglib2/test/RandomImgs.java b/src/main/java/net/imglib2/test/RandomImgs.java
index cba5b1277..2c77d4dbd 100644
--- a/src/main/java/net/imglib2/test/RandomImgs.java
+++ b/src/main/java/net/imglib2/test/RandomImgs.java
@@ -54,7 +54,6 @@
import net.imglib2.type.numeric.real.DoubleType;
import net.imglib2.type.numeric.real.FloatType;
import net.imglib2.util.Intervals;
-import net.imglib2.util.Util;
import net.imglib2.view.Views;
import java.util.Random;
@@ -105,7 +104,7 @@ public < T extends NativeType< T > > Img< T > nextImage( final T type, final lon
public < I extends RandomAccessibleInterval< T >, T >
I randomize( final I image )
{
- final T type = Util.getTypeFromInterval( image );
+ final T type = image.getType();
Views.iterable( image ).forEach( randomSetter( type ) );
return image;
}
diff --git a/src/main/java/net/imglib2/type/label/BasePairBitType.java b/src/main/java/net/imglib2/type/label/BasePairBitType.java
index 72d139369..104730ab5 100644
--- a/src/main/java/net/imglib2/type/label/BasePairBitType.java
+++ b/src/main/java/net/imglib2/type/label/BasePairBitType.java
@@ -179,7 +179,10 @@ public BasePairBitType createVariable()
@Override
public BasePairBitType copy()
{
- return new BasePairBitType( this.get() );
+ if ( dataAccess != null )
+ return new BasePairBitType( this.get() );
+ else
+ return createVariable();
}
@Override
diff --git a/src/main/java/net/imglib2/type/label/BasePairCharType.java b/src/main/java/net/imglib2/type/label/BasePairCharType.java
index 2c29bf392..4f5c9c0c7 100644
--- a/src/main/java/net/imglib2/type/label/BasePairCharType.java
+++ b/src/main/java/net/imglib2/type/label/BasePairCharType.java
@@ -184,7 +184,10 @@ public BasePairCharType createVariable()
@Override
public BasePairCharType copy()
{
- return new BasePairCharType( get() );
+ if ( dataAccess != null )
+ return new BasePairCharType( get() );
+ else
+ return createVariable();
}
@Override
diff --git a/src/main/java/net/imglib2/type/logic/BitType.java b/src/main/java/net/imglib2/type/logic/BitType.java
index 4bbd212e3..721cc2784 100644
--- a/src/main/java/net/imglib2/type/logic/BitType.java
+++ b/src/main/java/net/imglib2/type/logic/BitType.java
@@ -309,7 +309,7 @@ public BitType createVariable()
@Override
public BitType copy()
{
- return new BitType( get() );
+ return new BitType( dataAccess != null ? get() : false );
}
@Override
diff --git a/src/main/java/net/imglib2/type/logic/NativeBoolType.java b/src/main/java/net/imglib2/type/logic/NativeBoolType.java
index 1eefb0ce0..9ad2b4df4 100644
--- a/src/main/java/net/imglib2/type/logic/NativeBoolType.java
+++ b/src/main/java/net/imglib2/type/logic/NativeBoolType.java
@@ -269,7 +269,7 @@ public NativeBoolType createVariable()
@Override
public NativeBoolType copy()
{
- return new NativeBoolType( get() );
+ return new NativeBoolType( dataAccess != null ? get() : false );
}
@Override
diff --git a/src/main/java/net/imglib2/type/numeric/ARGBType.java b/src/main/java/net/imglib2/type/numeric/ARGBType.java
index 1ce2cd270..f92212cce 100644
--- a/src/main/java/net/imglib2/type/numeric/ARGBType.java
+++ b/src/main/java/net/imglib2/type/numeric/ARGBType.java
@@ -254,7 +254,7 @@ public ARGBType createVariable()
@Override
public ARGBType copy()
{
- return new ARGBType( get() );
+ return new ARGBType( dataAccess != null ? get() : 0 );
}
@Override
diff --git a/src/main/java/net/imglib2/type/numeric/NativeARGBDoubleType.java b/src/main/java/net/imglib2/type/numeric/NativeARGBDoubleType.java
index 2bd30ab18..418249638 100644
--- a/src/main/java/net/imglib2/type/numeric/NativeARGBDoubleType.java
+++ b/src/main/java/net/imglib2/type/numeric/NativeARGBDoubleType.java
@@ -186,7 +186,10 @@ public NativeARGBDoubleType createVariable()
@Override
public NativeARGBDoubleType copy()
{
- return new NativeARGBDoubleType( getA(), getR(), getG(), getB() );
+ if ( dataAccess != null )
+ return new NativeARGBDoubleType( getA(), getR(), getG(), getB() );
+ else
+ return createVariable();
}
@Override
diff --git a/src/main/java/net/imglib2/type/numeric/complex/ComplexDoubleType.java b/src/main/java/net/imglib2/type/numeric/complex/ComplexDoubleType.java
index 16b0daeda..8d7d46abe 100644
--- a/src/main/java/net/imglib2/type/numeric/complex/ComplexDoubleType.java
+++ b/src/main/java/net/imglib2/type/numeric/complex/ComplexDoubleType.java
@@ -187,7 +187,10 @@ public ComplexDoubleType createVariable()
@Override
public ComplexDoubleType copy()
{
- return new ComplexDoubleType( getRealFloat(), getImaginaryFloat() );
+ if ( dataAccess != null )
+ return new ComplexDoubleType( getRealFloat(), getImaginaryFloat() );
+ else
+ return createVariable();
}
@Override
diff --git a/src/main/java/net/imglib2/type/numeric/complex/ComplexFloatType.java b/src/main/java/net/imglib2/type/numeric/complex/ComplexFloatType.java
index f6d053281..076ed22f5 100644
--- a/src/main/java/net/imglib2/type/numeric/complex/ComplexFloatType.java
+++ b/src/main/java/net/imglib2/type/numeric/complex/ComplexFloatType.java
@@ -240,7 +240,10 @@ public ComplexFloatType createVariable()
@Override
public ComplexFloatType copy()
{
- return new ComplexFloatType( getRealFloat(), getImaginaryFloat() );
+ if ( dataAccess != null )
+ return new ComplexFloatType( getRealFloat(), getImaginaryFloat() );
+ else
+ return createVariable();
}
@Override
diff --git a/src/main/java/net/imglib2/type/numeric/integer/ByteType.java b/src/main/java/net/imglib2/type/numeric/integer/ByteType.java
index 509213547..13eb846bd 100644
--- a/src/main/java/net/imglib2/type/numeric/integer/ByteType.java
+++ b/src/main/java/net/imglib2/type/numeric/integer/ByteType.java
@@ -153,6 +153,6 @@ public ByteType createVariable()
@Override
public ByteType copy()
{
- return new ByteType( getByte() );
+ return new ByteType( dataAccess != null ? get() : 0 );
}
}
diff --git a/src/main/java/net/imglib2/type/numeric/integer/IntType.java b/src/main/java/net/imglib2/type/numeric/integer/IntType.java
index 0bba38c72..9dc6599ed 100644
--- a/src/main/java/net/imglib2/type/numeric/integer/IntType.java
+++ b/src/main/java/net/imglib2/type/numeric/integer/IntType.java
@@ -153,6 +153,6 @@ public IntType createVariable()
@Override
public IntType copy()
{
- return new IntType( getInt() );
+ return new IntType( dataAccess != null ? get() : 0 );
}
}
diff --git a/src/main/java/net/imglib2/type/numeric/integer/LongType.java b/src/main/java/net/imglib2/type/numeric/integer/LongType.java
index 4cfc41d90..387797577 100644
--- a/src/main/java/net/imglib2/type/numeric/integer/LongType.java
+++ b/src/main/java/net/imglib2/type/numeric/integer/LongType.java
@@ -161,6 +161,6 @@ public LongType createVariable()
@Override
public LongType copy()
{
- return new LongType( get() );
+ return new LongType( dataAccess != null ? get() : 0 );
}
}
diff --git a/src/main/java/net/imglib2/type/numeric/integer/ShortType.java b/src/main/java/net/imglib2/type/numeric/integer/ShortType.java
index 999a8ea80..acc8dbec7 100644
--- a/src/main/java/net/imglib2/type/numeric/integer/ShortType.java
+++ b/src/main/java/net/imglib2/type/numeric/integer/ShortType.java
@@ -153,6 +153,6 @@ public ShortType createVariable()
@Override
public ShortType copy()
{
- return new ShortType( getShort() );
+ return new ShortType( dataAccess != null ? get() : 0 );
}
}
diff --git a/src/main/java/net/imglib2/type/numeric/integer/Unsigned128BitType.java b/src/main/java/net/imglib2/type/numeric/integer/Unsigned128BitType.java
index 4945970f6..f1242bbdd 100644
--- a/src/main/java/net/imglib2/type/numeric/integer/Unsigned128BitType.java
+++ b/src/main/java/net/imglib2/type/numeric/integer/Unsigned128BitType.java
@@ -308,8 +308,11 @@ public Unsigned128BitType createVariable()
public Unsigned128BitType copy()
{
final Unsigned128BitType copy = new Unsigned128BitType();
- final int k = i.get() * 2;
- copy.set( dataAccess.getValue( k ), dataAccess.getValue( k + 1 ) );
+ if ( dataAccess != null )
+ {
+ final int k = i.get() * 2;
+ copy.set( dataAccess.getValue( k ), dataAccess.getValue( k + 1 ) );
+ }
return copy;
}
diff --git a/src/main/java/net/imglib2/type/numeric/integer/Unsigned12BitType.java b/src/main/java/net/imglib2/type/numeric/integer/Unsigned12BitType.java
index fd2bdce29..0a7fbf6a2 100644
--- a/src/main/java/net/imglib2/type/numeric/integer/Unsigned12BitType.java
+++ b/src/main/java/net/imglib2/type/numeric/integer/Unsigned12BitType.java
@@ -171,6 +171,6 @@ public Unsigned12BitType createVariable()
@Override
public Unsigned12BitType copy()
{
- return new Unsigned12BitType( get() );
+ return new Unsigned12BitType( dataAccess != null ? get() : 0 );
}
}
diff --git a/src/main/java/net/imglib2/type/numeric/integer/Unsigned2BitType.java b/src/main/java/net/imglib2/type/numeric/integer/Unsigned2BitType.java
index 2f5ac7485..ada05deec 100644
--- a/src/main/java/net/imglib2/type/numeric/integer/Unsigned2BitType.java
+++ b/src/main/java/net/imglib2/type/numeric/integer/Unsigned2BitType.java
@@ -140,6 +140,6 @@ public Unsigned2BitType createVariable()
@Override
public Unsigned2BitType copy()
{
- return new Unsigned2BitType( get() );
+ return new Unsigned2BitType( dataAccess != null ? get() : 0 );
}
}
diff --git a/src/main/java/net/imglib2/type/numeric/integer/Unsigned4BitType.java b/src/main/java/net/imglib2/type/numeric/integer/Unsigned4BitType.java
index 0d3a5ea9f..ca5d3027d 100644
--- a/src/main/java/net/imglib2/type/numeric/integer/Unsigned4BitType.java
+++ b/src/main/java/net/imglib2/type/numeric/integer/Unsigned4BitType.java
@@ -132,6 +132,6 @@ public Unsigned4BitType createVariable()
@Override
public Unsigned4BitType copy()
{
- return new Unsigned4BitType( get() );
+ return new Unsigned4BitType( dataAccess != null ? get() : 0 );
}
}
diff --git a/src/main/java/net/imglib2/type/numeric/integer/UnsignedByteType.java b/src/main/java/net/imglib2/type/numeric/integer/UnsignedByteType.java
index d55b41611..8da8bd778 100644
--- a/src/main/java/net/imglib2/type/numeric/integer/UnsignedByteType.java
+++ b/src/main/java/net/imglib2/type/numeric/integer/UnsignedByteType.java
@@ -213,7 +213,7 @@ public UnsignedByteType createVariable()
@Override
public UnsignedByteType copy()
{
- return new UnsignedByteType( get() );
+ return new UnsignedByteType( dataAccess != null ? get() : 0 );
}
@Override
diff --git a/src/main/java/net/imglib2/type/numeric/integer/UnsignedIntType.java b/src/main/java/net/imglib2/type/numeric/integer/UnsignedIntType.java
index 5725931d7..d30b618eb 100644
--- a/src/main/java/net/imglib2/type/numeric/integer/UnsignedIntType.java
+++ b/src/main/java/net/imglib2/type/numeric/integer/UnsignedIntType.java
@@ -248,7 +248,7 @@ public UnsignedIntType createVariable()
@Override
public UnsignedIntType copy()
{
- return new UnsignedIntType( get() );
+ return new UnsignedIntType( dataAccess != null ? get() : 0 );
}
@Override
diff --git a/src/main/java/net/imglib2/type/numeric/integer/UnsignedLongType.java b/src/main/java/net/imglib2/type/numeric/integer/UnsignedLongType.java
index 357565cf1..139893a89 100644
--- a/src/main/java/net/imglib2/type/numeric/integer/UnsignedLongType.java
+++ b/src/main/java/net/imglib2/type/numeric/integer/UnsignedLongType.java
@@ -345,7 +345,7 @@ public UnsignedLongType createVariable()
@Override
public UnsignedLongType copy()
{
- return new UnsignedLongType( get() );
+ return new UnsignedLongType( dataAccess != null ? get() : 0 );
}
@Override
diff --git a/src/main/java/net/imglib2/type/numeric/integer/UnsignedShortType.java b/src/main/java/net/imglib2/type/numeric/integer/UnsignedShortType.java
index b60b841bf..93a1e54ca 100644
--- a/src/main/java/net/imglib2/type/numeric/integer/UnsignedShortType.java
+++ b/src/main/java/net/imglib2/type/numeric/integer/UnsignedShortType.java
@@ -222,7 +222,7 @@ public UnsignedShortType createVariable()
@Override
public UnsignedShortType copy()
{
- return new UnsignedShortType( get() );
+ return new UnsignedShortType( dataAccess != null ? get() : 0 );
}
@Override
diff --git a/src/main/java/net/imglib2/type/numeric/integer/UnsignedVariableBitLengthType.java b/src/main/java/net/imglib2/type/numeric/integer/UnsignedVariableBitLengthType.java
index 06829430e..9e8a1e5cf 100644
--- a/src/main/java/net/imglib2/type/numeric/integer/UnsignedVariableBitLengthType.java
+++ b/src/main/java/net/imglib2/type/numeric/integer/UnsignedVariableBitLengthType.java
@@ -121,7 +121,10 @@ public UnsignedVariableBitLengthType createVariable()
@Override
public UnsignedVariableBitLengthType copy()
{
- return new UnsignedVariableBitLengthType( getBits(), nBits );
+ if ( dataAccess != null )
+ return new UnsignedVariableBitLengthType( getBits(), nBits );
+ else
+ return createVariable();
}
/** @see UnsignedLongType#divide(long, long) */
diff --git a/src/main/java/net/imglib2/type/numeric/real/DoubleType.java b/src/main/java/net/imglib2/type/numeric/real/DoubleType.java
index 77375ba08..8dbcf22f1 100644
--- a/src/main/java/net/imglib2/type/numeric/real/DoubleType.java
+++ b/src/main/java/net/imglib2/type/numeric/real/DoubleType.java
@@ -178,7 +178,7 @@ public DoubleType createVariable()
@Override
public DoubleType copy()
{
- return new DoubleType( get() );
+ return new DoubleType( dataAccess != null ? get() : 0 );
}
@Override
diff --git a/src/main/java/net/imglib2/type/numeric/real/FloatType.java b/src/main/java/net/imglib2/type/numeric/real/FloatType.java
index 2c1cdf0e7..aa20b1490 100644
--- a/src/main/java/net/imglib2/type/numeric/real/FloatType.java
+++ b/src/main/java/net/imglib2/type/numeric/real/FloatType.java
@@ -247,7 +247,7 @@ public FloatType createVariable()
@Override
public FloatType copy()
{
- return new FloatType( get() );
+ return new FloatType( dataAccess != null ? get() : 0 );
}
@Override
diff --git a/src/main/java/net/imglib2/util/ConstantUtils.java b/src/main/java/net/imglib2/util/ConstantUtils.java
index a054aa375..06811d9b6 100644
--- a/src/main/java/net/imglib2/util/ConstantUtils.java
+++ b/src/main/java/net/imglib2/util/ConstantUtils.java
@@ -70,6 +70,12 @@ public T get()
return constant;
}
+ @Override
+ public T getType()
+ {
+ return constant;
+ }
+
@Override
public ConstantRandomAccess copy()
{
@@ -88,6 +94,12 @@ public RandomAccess< T > randomAccess( final Interval interval )
{
return randomAccess();
}
+
+ @Override
+ public T getType()
+ {
+ return constant;
+ }
};
}
@@ -125,6 +137,12 @@ public T get()
return constant;
}
+ @Override
+ public T getType()
+ {
+ return constant;
+ }
+
@Override
public ConstantRealRandomAccess copy()
{
@@ -132,6 +150,12 @@ public ConstantRealRandomAccess copy()
}
}
+ @Override
+ public T getType()
+ {
+ return constant;
+ }
+
@Override
public ConstantRealRandomAccess realRandomAccess()
{
diff --git a/src/main/java/net/imglib2/util/Grid.java b/src/main/java/net/imglib2/util/Grid.java
index 00574c0bc..cb66b7d19 100644
--- a/src/main/java/net/imglib2/util/Grid.java
+++ b/src/main/java/net/imglib2/util/Grid.java
@@ -476,6 +476,12 @@ public Interval get()
return interval;
}
+ @Override
+ public Interval getType()
+ {
+ return interval;
+ }
+
CellIntervalsRA()
{
super( Grid.this.n );
@@ -550,6 +556,12 @@ public FlatIterationOrder iterationOrder()
{
return new FlatIterationOrder( this );
}
+
+ @Override
+ public Interval getType()
+ {
+ return firstElement();
+ }
}
private final CellIntervals cellIntervals;
diff --git a/src/main/java/net/imglib2/util/Localizables.java b/src/main/java/net/imglib2/util/Localizables.java
index c3b8296c1..1cfa9d150 100644
--- a/src/main/java/net/imglib2/util/Localizables.java
+++ b/src/main/java/net/imglib2/util/Localizables.java
@@ -197,6 +197,12 @@ public RandomAccess< Localizable > randomAccess( final Interval interval )
{
return randomAccess();
}
+
+ @Override
+ public Localizable getType()
+ {
+ return randomAccess();
+ }
}
/**
@@ -220,6 +226,12 @@ public Localizable get()
return this;
}
+ @Override
+ public Localizable getType()
+ {
+ return this;
+ }
+
@Override
public RandomAccess< Localizable > copy()
{
@@ -245,6 +257,12 @@ public RealLocationRealRandomAccess realRandomAccess( final RealInterval interva
{
return realRandomAccess();
}
+
+ @Override
+ public RealLocalizable getType()
+ {
+ return realRandomAccess();
+ }
}
/**
@@ -268,6 +286,12 @@ public RealLocationRealRandomAccess get()
return this;
}
+ @Override
+ public RealLocalizable getType()
+ {
+ return this;
+ }
+
@Override
public RealLocationRealRandomAccess copy()
{
diff --git a/src/main/java/net/imglib2/util/Util.java b/src/main/java/net/imglib2/util/Util.java
index 09bf3d62d..09253ba6b 100644
--- a/src/main/java/net/imglib2/util/Util.java
+++ b/src/main/java/net/imglib2/util/Util.java
@@ -38,12 +38,10 @@
import net.imglib2.Interval;
import net.imglib2.IterableInterval;
import net.imglib2.Localizable;
-import net.imglib2.RandomAccess;
import net.imglib2.RandomAccessible;
import net.imglib2.RandomAccessibleInterval;
import net.imglib2.RealInterval;
import net.imglib2.RealLocalizable;
-import net.imglib2.RealRandomAccess;
import net.imglib2.RealRandomAccessible;
import net.imglib2.exception.IncompatibleTypeException;
import net.imglib2.img.Img;
@@ -70,6 +68,7 @@
* @author Stephan Preibisch
* @author Stephan Saalfeld
* @author Curtis Rueden
+ * @author Philipp Hanslovsky
*/
public class Util
{
@@ -780,6 +779,11 @@ final static public long[] int2long( final int[] i )
}
/**
+ *
+ * This method has been deprecated.
+ * Use {@link RandomAccessibleInterval#getType()} instead.
+ * TODO: Cannot deprecate because rai parameter is not actually a RandomAccessibleInterval
+ *
* Gets an instance of T from the {@link RandomAccessibleInterval} by
* querying the value at the min coordinate
*
@@ -789,15 +793,11 @@ final static public long[] int2long( final int[] i )
* - the {@link RandomAccessibleInterval}
* @return - an instance of T
*/
- final public static < T, F extends Interval & RandomAccessible< T > > T getTypeFromInterval( final F rai )
+ @Deprecated
+ public static < T, F extends Interval & RandomAccessible< T > > T getTypeFromInterval( final F rai )
{
- // create RandomAccess
- final RandomAccess< T > randomAccess = rai.randomAccess();
-
- // place it at the first pixel
- rai.min( randomAccess );
-
- return randomAccess.get();
+ final T type = rai.getType();
+ return type instanceof Type ? ( T ) ( ( Type ) type ).createVariable() : type;
}
/**
@@ -810,15 +810,11 @@ final public static < T, F extends Interval & RandomAccessible< T > > T getTypeF
* - the {@link RandomAccessibleInterval}
* @return - an instance of T
*/
- final public static < T, F extends RealInterval & RealRandomAccessible< T >> T getTypeFromRealInterval( final F rai )
+ @Deprecated
+ public static < T, F extends RealInterval & RealRandomAccessible< T > > T getTypeFromRealInterval( final F rai )
{
- // create RealRandomAccess
- final RealRandomAccess< T > realRandomAccess = rai.realRandomAccess();
-
- // place it at the first pixel
- rai.realMin( realRandomAccess );
-
- return realRandomAccess.get();
+ final T type = rai.getType();
+ return type instanceof Type ? ( T ) ( ( Type ) type ).createVariable() : type;
}
/**
diff --git a/src/main/java/net/imglib2/view/BundleView.java b/src/main/java/net/imglib2/view/BundleView.java
index 7d1faf8c6..cf521554e 100644
--- a/src/main/java/net/imglib2/view/BundleView.java
+++ b/src/main/java/net/imglib2/view/BundleView.java
@@ -73,6 +73,12 @@ public RandomAccess< T > get()
return source;
}
+ @Override
+ public RandomAccess< T > getType()
+ {
+ return source;
+ }
+
@Override
public BundleRandomAccess copy()
{
@@ -102,4 +108,10 @@ public BundleRandomAccess randomAccess( final Interval interval )
{
return new BundleRandomAccess( source.randomAccess( interval ) );
}
+
+ @Override
+ public RandomAccess< T > getType()
+ {
+ return source.randomAccess();
+ }
}
diff --git a/src/main/java/net/imglib2/view/ExtendedRandomAccessibleInterval.java b/src/main/java/net/imglib2/view/ExtendedRandomAccessibleInterval.java
index bad33a0cb..7afd0ab2c 100644
--- a/src/main/java/net/imglib2/view/ExtendedRandomAccessibleInterval.java
+++ b/src/main/java/net/imglib2/view/ExtendedRandomAccessibleInterval.java
@@ -93,4 +93,11 @@ public F getSource()
{
return factory;
}
+
+ @Override
+ public T getType()
+ {
+ // source may have an optimized implementation for getType
+ return source.getType();
+ }
}
diff --git a/src/main/java/net/imglib2/view/ExtendedRealRandomAccessibleRealInterval.java b/src/main/java/net/imglib2/view/ExtendedRealRandomAccessibleRealInterval.java
index 4b3ecee0b..d793d9bef 100644
--- a/src/main/java/net/imglib2/view/ExtendedRealRandomAccessibleRealInterval.java
+++ b/src/main/java/net/imglib2/view/ExtendedRealRandomAccessibleRealInterval.java
@@ -91,4 +91,11 @@ public F getSource()
{
return factory;
}
+
+ @Override
+ public T getType()
+ {
+ // source may have an optimized implementation for getType
+ return source.getType();
+ }
}
diff --git a/src/main/java/net/imglib2/view/FullSourceMapMixedRandomAccess.java b/src/main/java/net/imglib2/view/FullSourceMapMixedRandomAccess.java
index 92d0e9be4..6344da24d 100644
--- a/src/main/java/net/imglib2/view/FullSourceMapMixedRandomAccess.java
+++ b/src/main/java/net/imglib2/view/FullSourceMapMixedRandomAccess.java
@@ -368,6 +368,12 @@ public T get()
return s.get();
}
+ @Override
+ public T getType()
+ {
+ return s.getType();
+ }
+
@Override
public FullSourceMapMixedRandomAccess< T > copy()
{
diff --git a/src/main/java/net/imglib2/view/FullSourceMapSlicingRandomAccess.java b/src/main/java/net/imglib2/view/FullSourceMapSlicingRandomAccess.java
index 4de89a070..5f0767c55 100644
--- a/src/main/java/net/imglib2/view/FullSourceMapSlicingRandomAccess.java
+++ b/src/main/java/net/imglib2/view/FullSourceMapSlicingRandomAccess.java
@@ -310,6 +310,12 @@ public T get()
return s.get();
}
+ @Override
+ public T getType()
+ {
+ return s.getType();
+ }
+
@Override
public FullSourceMapSlicingRandomAccess< T > copy()
{
diff --git a/src/main/java/net/imglib2/view/FunctionView.java b/src/main/java/net/imglib2/view/FunctionView.java
index f34578178..4f5880fd8 100644
--- a/src/main/java/net/imglib2/view/FunctionView.java
+++ b/src/main/java/net/imglib2/view/FunctionView.java
@@ -59,6 +59,12 @@ public B get()
return function.apply( source.get() );
}
+ @Override
+ public B getType()
+ {
+ return get(); // TODO GET-TYPE: It looks like there is no good solution here.
+ }
+
@Override
public FunctionRandomAccess copy()
{
@@ -89,4 +95,10 @@ public RandomAccess< B > randomAccess( final Interval interval )
{
return new FunctionRandomAccess( source.randomAccess( interval ) );
}
+
+ @Override
+ public B getType()
+ {
+ return randomAccess().getType();
+ }
}
diff --git a/src/main/java/net/imglib2/view/HyperSlice.java b/src/main/java/net/imglib2/view/HyperSlice.java
index 58760e15d..11fd1a438 100644
--- a/src/main/java/net/imglib2/view/HyperSlice.java
+++ b/src/main/java/net/imglib2/view/HyperSlice.java
@@ -241,6 +241,12 @@ public T get()
return sourceAccess.get();
}
+ @Override
+ public T getType()
+ {
+ return sourceAccess.getType();
+ }
+
@Override
public HyperSliceRandomAccess copy()
{
@@ -302,4 +308,10 @@ public RandomAccess< T > randomAccess( final Interval interval )
return new HyperSliceRandomAccess();
}
+ @Override
+ public T getType()
+ {
+ // source may have an optimized implementation for getType
+ return source.getType();
+ }
}
diff --git a/src/main/java/net/imglib2/view/HyperSlicesView.java b/src/main/java/net/imglib2/view/HyperSlicesView.java
index 9131d2db4..aacaf9cc6 100644
--- a/src/main/java/net/imglib2/view/HyperSlicesView.java
+++ b/src/main/java/net/imglib2/view/HyperSlicesView.java
@@ -78,6 +78,12 @@ public HyperSlice< T > get()
return new HyperSlice<>( source, accessAxes, position );
}
+ @Override
+ public HyperSlice< T > getType()
+ {
+ return new HyperSlice< T >( source, accessAxes, new long[ source.numDimensions() ] );
+ }
+
@Override
public HyperSlicesViewRandomAccess copy()
{
@@ -123,5 +129,9 @@ public HyperSlicesViewRandomAccess randomAccess( final Interval interval )
return randomAccess();
}
-
+ @Override
+ public HyperSlice< T > getType()
+ {
+ return randomAccess().getType();
+ }
}
diff --git a/src/main/java/net/imglib2/view/IntervalView.java b/src/main/java/net/imglib2/view/IntervalView.java
index 275753e66..eef92cbba 100644
--- a/src/main/java/net/imglib2/view/IntervalView.java
+++ b/src/main/java/net/imglib2/view/IntervalView.java
@@ -173,4 +173,11 @@ public Cursor< T > localizingCursor()
{
return getFullViewIterableInterval().localizingCursor();
}
+
+ @Override
+ public T getType()
+ {
+ // source may have an optimized implementation for getType
+ return source.getType();
+ }
}
diff --git a/src/main/java/net/imglib2/view/IterableRandomAccessibleInterval.java b/src/main/java/net/imglib2/view/IterableRandomAccessibleInterval.java
index 8a50755c6..ea652cc61 100644
--- a/src/main/java/net/imglib2/view/IterableRandomAccessibleInterval.java
+++ b/src/main/java/net/imglib2/view/IterableRandomAccessibleInterval.java
@@ -106,4 +106,11 @@ public RandomAccess< T > randomAccess( final Interval i )
{
return sourceInterval.randomAccess( i );
}
+
+ @Override
+ public T getType()
+ {
+ // source may have an optimized implementation for getType
+ return sourceInterval.getType();
+ }
}
diff --git a/src/main/java/net/imglib2/view/MixedRandomAccess.java b/src/main/java/net/imglib2/view/MixedRandomAccess.java
index cfa060c08..cc4b66723 100644
--- a/src/main/java/net/imglib2/view/MixedRandomAccess.java
+++ b/src/main/java/net/imglib2/view/MixedRandomAccess.java
@@ -364,6 +364,12 @@ public T get()
return s.get();
}
+ @Override
+ public T getType()
+ {
+ return s.getType();
+ }
+
@Override
public MixedRandomAccess< T > copy()
{
diff --git a/src/main/java/net/imglib2/view/MixedTransformView.java b/src/main/java/net/imglib2/view/MixedTransformView.java
index e73cf0479..ae7fd75f3 100644
--- a/src/main/java/net/imglib2/view/MixedTransformView.java
+++ b/src/main/java/net/imglib2/view/MixedTransformView.java
@@ -122,4 +122,11 @@ public RandomAccess< T > randomAccess()
fullViewRandomAccessible = TransformBuilder.getEfficientRandomAccessible( null, this );
return fullViewRandomAccessible.randomAccess();
}
+
+ @Override
+ public T getType()
+ {
+ // source may have an optimized implementation for getType
+ return source.getType();
+ }
}
diff --git a/src/main/java/net/imglib2/view/RandomAccessibleIntervalCursor.java b/src/main/java/net/imglib2/view/RandomAccessibleIntervalCursor.java
index 99baaece2..2cf7c7156 100644
--- a/src/main/java/net/imglib2/view/RandomAccessibleIntervalCursor.java
+++ b/src/main/java/net/imglib2/view/RandomAccessibleIntervalCursor.java
@@ -96,6 +96,12 @@ public T get()
return randomAccess.get();
}
+ @Override
+ public T getType()
+ {
+ return randomAccess.getType();
+ }
+
@Override
public void jumpFwd( final long steps )
{
diff --git a/src/main/java/net/imglib2/view/RandomAccessibleOnRealRandomAccessible.java b/src/main/java/net/imglib2/view/RandomAccessibleOnRealRandomAccessible.java
index 17655cf74..592efc0bc 100644
--- a/src/main/java/net/imglib2/view/RandomAccessibleOnRealRandomAccessible.java
+++ b/src/main/java/net/imglib2/view/RandomAccessibleOnRealRandomAccessible.java
@@ -57,9 +57,9 @@ public class RandomAccessibleOnRealRandomAccessible< T > extends AbstractEuclide
{
final protected RealRandomAccessible< T > source;
- final protected class RandomAccessOnRealRandomAccessible implements RandomAccess< T >
+ private final class RandomAccessOnRealRandomAccessible implements RandomAccess< T >
{
- final protected RealRandomAccess< T > sourceAccess;
+ private final RealRandomAccess< T > sourceAccess;
public RandomAccessOnRealRandomAccessible( final RealRandomAccess< T > sourceAccess )
{
@@ -194,6 +194,12 @@ public T get()
return sourceAccess.get();
}
+ @Override
+ public T getType()
+ {
+ return sourceAccess.getType();
+ }
+
@Override
public RandomAccessOnRealRandomAccessible copy()
{
@@ -229,4 +235,11 @@ public RandomAccess< T > randomAccess( final Interval interval )
{
return new RandomAccessOnRealRandomAccessible( source.realRandomAccess( interval ) );
}
+
+ @Override
+ public T getType()
+ {
+ // source may have an optimized implementation for getType
+ return source.getType();
+ }
}
diff --git a/src/main/java/net/imglib2/view/RandomAccessiblePair.java b/src/main/java/net/imglib2/view/RandomAccessiblePair.java
index a5ea1663d..6858b52a4 100644
--- a/src/main/java/net/imglib2/view/RandomAccessiblePair.java
+++ b/src/main/java/net/imglib2/view/RandomAccessiblePair.java
@@ -37,6 +37,7 @@
import net.imglib2.Localizable;
import net.imglib2.RandomAccessible;
import net.imglib2.util.Pair;
+import net.imglib2.util.ValuePair;
/**
* A {@link RandomAccessible} over two independent
@@ -218,6 +219,12 @@ public RandomAccess get()
return this;
}
+ @Override
+ public RandomAccess getType()
+ {
+ return this;
+ }
+
@Override
public RandomAccess copy()
{
@@ -252,4 +259,11 @@ public RandomAccess randomAccess( final Interval interval )
{
return new RandomAccess();
}
+
+ @Override
+ public Pair< A, B > getType()
+ {
+ // sources may have an optimized implementation for getType
+ return new ValuePair<>( sourceA.getType(), sourceB.getType() );
+ }
}
diff --git a/src/main/java/net/imglib2/view/SlicingRandomAccess.java b/src/main/java/net/imglib2/view/SlicingRandomAccess.java
index a9dab2aa6..99e18945a 100644
--- a/src/main/java/net/imglib2/view/SlicingRandomAccess.java
+++ b/src/main/java/net/imglib2/view/SlicingRandomAccess.java
@@ -298,6 +298,12 @@ public T get()
return s.get();
}
+ @Override
+ public T getType()
+ {
+ return s.getType();
+ }
+
@Override
public SlicingRandomAccess< T > copy()
{
diff --git a/src/main/java/net/imglib2/view/StackView.java b/src/main/java/net/imglib2/view/StackView.java
index 8ef7a1dc0..392fdf436 100644
--- a/src/main/java/net/imglib2/view/StackView.java
+++ b/src/main/java/net/imglib2/view/StackView.java
@@ -147,6 +147,12 @@ public RandomAccess< T > randomAccess( final Interval interval )
new DefaultRA< T >( slices, interval );
}
+ @Override
+ public T getType()
+ {
+ return slices.length > 0 ? slices[ 0 ].getType() : null;
+ }
+
/**
* Get the source slices that are stacked in this {@link StackView}. These
* are {@code (numDimensions() - 1)} dimensional
@@ -435,6 +441,12 @@ public T get()
return sliceAccess.get();
}
+ @Override
+ public T getType()
+ {
+ return sliceAccess.getType();
+ }
+
@Override
public DefaultRA< T > copy()
{
@@ -710,6 +722,12 @@ public T get()
return sliceAccesses[ slice ].get();
}
+ @Override
+ public T getType()
+ {
+ return sliceAccesses[ 0 ].getType();
+ }
+
@Override
public MoveAllSlicesRA< T > copy()
{
diff --git a/src/main/java/net/imglib2/view/SubsampleView.java b/src/main/java/net/imglib2/view/SubsampleView.java
index 6bf54bc03..528a8ffb7 100644
--- a/src/main/java/net/imglib2/view/SubsampleView.java
+++ b/src/main/java/net/imglib2/view/SubsampleView.java
@@ -225,6 +225,12 @@ public T get()
return sourceRandomAccess.get();
}
+ @Override
+ public T getType()
+ {
+ return sourceRandomAccess.getType();
+ }
+
@Override
public SubsampleRandomAccess copy()
{
@@ -278,4 +284,11 @@ public long[] getSteps()
{
return steps.clone();
}
+
+ @Override
+ public T getType()
+ {
+ // source may have an optimized implementation for getType
+ return source.getType();
+ }
}
diff --git a/src/main/java/net/imglib2/view/TransformBuilder.java b/src/main/java/net/imglib2/view/TransformBuilder.java
index db7b0d897..a883bdeb0 100644
--- a/src/main/java/net/imglib2/view/TransformBuilder.java
+++ b/src/main/java/net/imglib2/view/TransformBuilder.java
@@ -388,6 +388,12 @@ public RandomAccess< T > randomAccess( final Interval interval )
{
return new TransformRandomAccess< T >( s.randomAccess(), t );
}
+
+ @Override
+ public T getType()
+ {
+ return s.getType();
+ }
};
}
@@ -417,6 +423,12 @@ public RandomAccess< T > randomAccess( final Interval interval )
return new FullSourceMapMixedRandomAccess< T >( s.randomAccess(), t );
return new MixedRandomAccess< T >( s.randomAccess(), t );
}
+
+ @Override
+ public T getType()
+ {
+ return s.getType();
+ }
};
}
@@ -441,6 +453,12 @@ public TranslationRandomAccess< T > randomAccess( final Interval interval )
{
return new TranslationRandomAccess< T >( s.randomAccess(), t );
}
+
+ @Override
+ public T getType()
+ {
+ return s.getType();
+ }
};
}
@@ -470,6 +488,12 @@ public RandomAccess< T > randomAccess( final Interval interval )
return new FullSourceMapSlicingRandomAccess< T >( s.randomAccess(), t );
return new SlicingRandomAccess< T >( s.randomAccess(), t );
}
+
+ @Override
+ public T getType()
+ {
+ return s.getType();
+ }
};
}
}
diff --git a/src/main/java/net/imglib2/view/TransformRandomAccess.java b/src/main/java/net/imglib2/view/TransformRandomAccess.java
index 0abef5106..73fd91481 100644
--- a/src/main/java/net/imglib2/view/TransformRandomAccess.java
+++ b/src/main/java/net/imglib2/view/TransformRandomAccess.java
@@ -184,11 +184,17 @@ public void setPosition( final long pos, final int d )
@Override
public T get()
{
- transformToSource.apply( position, tmp );
- source.setPosition( tmp );
+ transformToSource.apply( position, tmp );
+ source.setPosition( tmp );
return source.get();
}
+ @Override
+ public T getType()
+ {
+ return source.getType();
+ }
+
@Override
public TransformRandomAccess< T > copy()
{
diff --git a/src/main/java/net/imglib2/view/TransformedRandomAccessible.java b/src/main/java/net/imglib2/view/TransformedRandomAccessible.java
index 4b7065b01..224790ac5 100644
--- a/src/main/java/net/imglib2/view/TransformedRandomAccessible.java
+++ b/src/main/java/net/imglib2/view/TransformedRandomAccessible.java
@@ -69,4 +69,10 @@ public interface TransformedRandomAccessible< T > extends RandomAccessible< T >,
* source} coordinates.
*/
Transform getTransformToSource();
+
+ default T getType()
+ {
+ // source may have an optimized implementation for getType
+ return getSource().getType();
+ }
}
diff --git a/src/main/java/net/imglib2/view/TranslationRandomAccess.java b/src/main/java/net/imglib2/view/TranslationRandomAccess.java
index c5cfabcff..84f7c825b 100644
--- a/src/main/java/net/imglib2/view/TranslationRandomAccess.java
+++ b/src/main/java/net/imglib2/view/TranslationRandomAccess.java
@@ -223,6 +223,12 @@ public T get()
return s.get();
}
+ @Override
+ public T getType()
+ {
+ return s.getType();
+ }
+
@Override
public TranslationRandomAccess< T > copy()
{
diff --git a/src/main/java/net/imglib2/view/Views.java b/src/main/java/net/imglib2/view/Views.java
index 192a95440..d57ded298 100644
--- a/src/main/java/net/imglib2/view/Views.java
+++ b/src/main/java/net/imglib2/view/Views.java
@@ -223,7 +223,7 @@ public static < T extends Type< T >, F extends RandomAccessibleInterval< T > > E
*/
public static < T extends RealType< T >, F extends RandomAccessibleInterval< T > > ExtendedRandomAccessibleInterval< T, F > extendValue( final F source, final float value )
{
- final T extension = Util.getTypeFromInterval( source ).createVariable();
+ final T extension = source.getType().createVariable();
extension.setReal( value );
return Views.extendValue( source, extension );
}
@@ -242,7 +242,7 @@ public static < T extends RealType< T >, F extends RandomAccessibleInterval< T >
*/
public static < T extends RealType< T >, F extends RandomAccessibleInterval< T > > ExtendedRandomAccessibleInterval< T, F > extendValue( final F source, final double value )
{
- final T extension = Util.getTypeFromInterval( source ).createVariable();
+ final T extension = source.getType().createVariable();
extension.setReal( value );
return Views.extendValue( source, extension );
}
@@ -261,7 +261,7 @@ public static < T extends RealType< T >, F extends RandomAccessibleInterval< T >
*/
public static < T extends IntegerType< T >, F extends RandomAccessibleInterval< T > > ExtendedRandomAccessibleInterval< T, F > extendValue( final F source, final int value )
{
- final T extension = Util.getTypeFromInterval( source ).createVariable();
+ final T extension = source.getType().createVariable();
extension.setInteger( value );
return Views.extendValue( source, extension );
}
@@ -280,7 +280,7 @@ public static < T extends IntegerType< T >, F extends RandomAccessibleInterval<
*/
public static < T extends IntegerType< T >, F extends RandomAccessibleInterval< T > > ExtendedRandomAccessibleInterval< T, F > extendValue( final F source, final long value )
{
- final T extension = Util.getTypeFromInterval( source ).createVariable();
+ final T extension = source.getType().createVariable();
extension.setInteger( value );
return Views.extendValue( source, extension );
}
@@ -299,7 +299,7 @@ public static < T extends IntegerType< T >, F extends RandomAccessibleInterval<
*/
public static < T extends BooleanType< T >, F extends RandomAccessibleInterval< T > > ExtendedRandomAccessibleInterval< T, F > extendValue( final F source, final boolean value )
{
- final T extension = Util.getTypeFromInterval( source ).createVariable();
+ final T extension = source.getType().createVariable();
extension.set( value );
return Views.extendValue( source, extension );
}
@@ -316,7 +316,7 @@ public static < T extends BooleanType< T >, F extends RandomAccessibleInterval<
*/
public static < T extends NumericType< T >, F extends RandomAccessibleInterval< T > > ExtendedRandomAccessibleInterval< T, F > extendZero( final F source )
{
- final T zero = Util.getTypeFromInterval( source ).createVariable();
+ final T zero = source.getType().createVariable();
zero.setZero();
return new ExtendedRandomAccessibleInterval<>( source, new OutOfBoundsConstantValueFactory<>( zero ) );
}
@@ -337,7 +337,7 @@ public static < T extends NumericType< T >, F extends RandomAccessibleInterval<
*/
public static < T extends RealType< T >, F extends RandomAccessibleInterval< T > > ExtendedRandomAccessibleInterval< T, F > extendRandom( final F source, final double min, final double max )
{
- return new ExtendedRandomAccessibleInterval<>( source, new OutOfBoundsRandomValueFactory<>( Util.getTypeFromInterval( source ), min, max ) );
+ return new ExtendedRandomAccessibleInterval<>( source, new OutOfBoundsRandomValueFactory<>( source.getType(), min, max ) );
}
/**
@@ -838,9 +838,9 @@ public static boolean isZeroMin( final Interval interval )
@SuppressWarnings( "unchecked" )
public static < T > IterableInterval< T > iterable( final RandomAccessibleInterval< T > randomAccessibleInterval )
{
- if ( IterableInterval.class.isInstance( randomAccessibleInterval ) )
+ if ( randomAccessibleInterval instanceof IterableInterval )
{
- final Class< ? > raiType = Util.getTypeFromInterval( randomAccessibleInterval ).getClass();
+ final Class< ? > raiType = randomAccessibleInterval.getType().getClass();
final Iterator< ? > iter = ( ( IterableInterval< ? > ) randomAccessibleInterval ).iterator();
final Object o = iter.hasNext() ? iter.next() : null;
if ( raiType.isInstance( o ) )
@@ -863,9 +863,9 @@ public static < T > IterableInterval< T > iterable( final RandomAccessibleInterv
@SuppressWarnings( "unchecked" )
public static < T > IterableInterval< T > flatIterable( final RandomAccessibleInterval< T > randomAccessibleInterval )
{
- if ( IterableInterval.class.isInstance( randomAccessibleInterval ) && FlatIterationOrder.class.isInstance( ( ( IterableInterval< T > ) randomAccessibleInterval ).iterationOrder() ) )
+ if ( randomAccessibleInterval instanceof IterableInterval && ( ( IterableInterval< T > ) randomAccessibleInterval ).iterationOrder() instanceof FlatIterationOrder )
{
- final Class< ? > raiType = Util.getTypeFromInterval( randomAccessibleInterval ).getClass();
+ final Class< ? > raiType = randomAccessibleInterval.getType().getClass();
final Iterator< ? > iter = ( ( IterableInterval< ? > ) randomAccessibleInterval ).iterator();
final Object o = iter.hasNext() ? iter.next() : null;
if ( raiType.isInstance( o ) )
@@ -1473,7 +1473,7 @@ public static < T extends Type< T > > IntervalView< T > expandValue( final Rando
*/
public static < T extends RealType< T > > IntervalView< T > expandValue( final RandomAccessibleInterval< T > source, final float value, final long... border )
{
- final T extension = Util.getTypeFromInterval( source ).createVariable();
+ final T extension = source.getType().createVariable();
extension.setReal( value );
return Views.expandValue( source, extension, border );
}
@@ -1491,7 +1491,7 @@ public static < T extends RealType< T > > IntervalView< T > expandValue( final R
*/
public static < T extends RealType< T > > IntervalView< T > expandValue( final RandomAccessibleInterval< T > source, final double value, final long... border )
{
- final T extension = Util.getTypeFromInterval( source ).createVariable();
+ final T extension = source.getType().createVariable();
extension.setReal( value );
return Views.expandValue( source, extension, border );
}
@@ -1509,7 +1509,7 @@ public static < T extends RealType< T > > IntervalView< T > expandValue( final R
*/
public static < T extends IntegerType< T > > IntervalView< T > expandValue( final RandomAccessibleInterval< T > source, final int value, final long... border )
{
- final T extension = Util.getTypeFromInterval( source ).createVariable();
+ final T extension = source.getType().createVariable();
extension.setInteger( value );
return Views.expandValue( source, extension, border );
}
@@ -1527,7 +1527,7 @@ public static < T extends IntegerType< T > > IntervalView< T > expandValue( fina
*/
public static < T extends IntegerType< T > > IntervalView< T > expandValue( final RandomAccessibleInterval< T > source, final long value, final long... border )
{
- final T extension = Util.getTypeFromInterval( source ).createVariable();
+ final T extension = source.getType().createVariable();
extension.setInteger( value );
return Views.expandValue( source, extension, border );
}
@@ -1545,7 +1545,7 @@ public static < T extends IntegerType< T > > IntervalView< T > expandValue( fina
*/
public static < T extends BooleanType< T > > IntervalView< T > expandValue( final RandomAccessibleInterval< T > source, final boolean value, final long... border )
{
- final T extension = Util.getTypeFromInterval( source ).createVariable();
+ final T extension = source.getType().createVariable();
extension.set( value );
return Views.expandValue( source, extension, border );
}
diff --git a/src/main/java/net/imglib2/view/composite/CompositeView.java b/src/main/java/net/imglib2/view/composite/CompositeView.java
index 75e12788e..0780aba55 100644
--- a/src/main/java/net/imglib2/view/composite/CompositeView.java
+++ b/src/main/java/net/imglib2/view/composite/CompositeView.java
@@ -215,6 +215,12 @@ public C get()
return composite;
}
+ @Override
+ public C getType()
+ {
+ return composite;
+ }
+
@Override
public CompositeRandomAccess copy()
{
@@ -247,4 +253,10 @@ public CompositeRandomAccess randomAccess( final Interval interval )
return randomAccess();
}
+ @Override
+ public C getType()
+ {
+ return randomAccess().getType();
+ }
+
}
diff --git a/src/main/java/net/imglib2/view/composite/InflateView.java b/src/main/java/net/imglib2/view/composite/InflateView.java
index 4e77f35c5..796bf3dd3 100644
--- a/src/main/java/net/imglib2/view/composite/InflateView.java
+++ b/src/main/java/net/imglib2/view/composite/InflateView.java
@@ -282,6 +282,12 @@ public T get()
return composite.get( compositePosition );
}
+ @Override
+ public T getType()
+ {
+ return composite.get( 0 );
+ }
+
@Override
public InflateRandomAccess copy()
{
@@ -313,4 +319,10 @@ public InflateRandomAccess randomAccess( final Interval interval )
{
return randomAccess();
}
+
+ @Override
+ public T getType()
+ {
+ return source.getType().get( 0 );
+ }
}
diff --git a/src/main/java/net/imglib2/view/composite/InterleaveView.java b/src/main/java/net/imglib2/view/composite/InterleaveView.java
index 0eccd1401..1e1c817c2 100644
--- a/src/main/java/net/imglib2/view/composite/InterleaveView.java
+++ b/src/main/java/net/imglib2/view/composite/InterleaveView.java
@@ -276,6 +276,12 @@ public T get()
return composite.get( compositePosition );
}
+ @Override
+ public T getType()
+ {
+ return composite.get( 0 );
+ }
+
@Override
public InterleaveRandomAccess copy()
{
@@ -289,6 +295,12 @@ public InterleaveView( final RandomAccessible< ? extends Composite< T > > source
n = source.numDimensions() + 1;
}
+ @Override
+ public T getType()
+ {
+ return source.getType().get( 0 );
+ }
+
@Override
public int numDimensions()
{
diff --git a/src/main/java/net/imglib2/view/iteration/IterableTransformBuilder.java b/src/main/java/net/imglib2/view/iteration/IterableTransformBuilder.java
index 1442d4598..69ae48fee 100644
--- a/src/main/java/net/imglib2/view/iteration/IterableTransformBuilder.java
+++ b/src/main/java/net/imglib2/view/iteration/IterableTransformBuilder.java
@@ -145,6 +145,12 @@ public Cursor< T > localizingCursor()
{
return iterableSource.localizingCursor( interval );
}
+
+ @Override
+ public T getType()
+ {
+ return iterableSource.getType();
+ }
}
/**
@@ -195,6 +201,12 @@ public Cursor< T > localizingCursor()
{
return new SlicingCursor< T >( iterableSource.localizingCursor( sourceInterval ), transformToSource );
}
+
+ @Override
+ public T getType()
+ {
+ return iterableSource.getType();
+ }
}
/**
diff --git a/src/main/java/net/imglib2/view/iteration/SlicingCursor.java b/src/main/java/net/imglib2/view/iteration/SlicingCursor.java
index 323118371..092d4d875 100644
--- a/src/main/java/net/imglib2/view/iteration/SlicingCursor.java
+++ b/src/main/java/net/imglib2/view/iteration/SlicingCursor.java
@@ -197,6 +197,12 @@ public T get()
return s.get();
}
+ @Override
+ public T getType()
+ {
+ return s.getType();
+ }
+
/**
* {@inheritDoc}
*/
diff --git a/src/main/java/net/imglib2/view/iteration/SubIntervalIterable.java b/src/main/java/net/imglib2/view/iteration/SubIntervalIterable.java
index d85c5eaa0..efd7160c4 100644
--- a/src/main/java/net/imglib2/view/iteration/SubIntervalIterable.java
+++ b/src/main/java/net/imglib2/view/iteration/SubIntervalIterable.java
@@ -35,6 +35,7 @@
import net.imglib2.Cursor;
import net.imglib2.Interval;
+import net.imglib2.IterableInterval;
import net.imglib2.IterableRealInterval;
/**
@@ -43,7 +44,7 @@
*
* @author Tobias Pietzsch
*/
-public interface SubIntervalIterable< T >
+public interface SubIntervalIterable< T > extends IterableInterval< T >
{
/**
* Determine whether a {@link Cursor} can be created that iterates the given
diff --git a/src/test/java/net/imglib2/RandomAccessibleIntervalTest.java b/src/test/java/net/imglib2/RandomAccessibleIntervalTest.java
new file mode 100644
index 000000000..384513406
--- /dev/null
+++ b/src/test/java/net/imglib2/RandomAccessibleIntervalTest.java
@@ -0,0 +1,59 @@
+/*
+ * #%L
+ * ImgLib2: a general-purpose, multidimensional image processing library.
+ * %%
+ * Copyright (C) 2009 - 2022 Tobias Pietzsch, Stephan Preibisch, Stephan Saalfeld,
+ * John Bogovic, Albert Cardona, Barry DeZonia, Christian Dietz, Jan Funke,
+ * Aivar Grislis, Jonathan Hale, Grant Harris, Stefan Helfrich, Mark Hiner,
+ * Martin Horn, Steffen Jaensch, Lee Kamentsky, Larry Lindsey, Melissa Linkert,
+ * Mark Longair, Brian Northan, Nick Perry, Curtis Rueden, Johannes Schindelin,
+ * Jean-Yves Tinevez and Michael Zinsmaier.
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
+
+package net.imglib2;
+
+import net.imglib2.img.array.ArrayImgs;
+import net.imglib2.type.numeric.integer.ByteType;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Tests {@link RandomAccessibleInterval}.
+ *
+ * @author Philipp Hanslovsky
+ */
+public class RandomAccessibleIntervalTest
+{
+
+ @Test
+ public void testGetType()
+ {
+ // setup
+ final RandomAccessibleInterval< ? > rai = ArrayImgs.bytes( 1 );
+ // process & test
+ assertEquals( ByteType.class, rai.getType().getClass() );
+ }
+}
diff --git a/src/test/java/net/imglib2/converter/AbstractConvertedRandomAccessibleIntervalTest.java b/src/test/java/net/imglib2/converter/AbstractConvertedRandomAccessibleIntervalTest.java
index 84c170c41..1ae1b2801 100644
--- a/src/test/java/net/imglib2/converter/AbstractConvertedRandomAccessibleIntervalTest.java
+++ b/src/test/java/net/imglib2/converter/AbstractConvertedRandomAccessibleIntervalTest.java
@@ -86,6 +86,12 @@ public DoubleType get()
return t;
}
+ @Override
+ public DoubleType getType()
+ {
+ return t;
+ }
+
@Override
public AbstractConvertedRandomAccess< DoubleType, DoubleType > copy()
{
@@ -100,6 +106,11 @@ public AbstractConvertedRandomAccess< DoubleType, DoubleType > randomAccess( fin
return randomAccess();
}
+ @Override
+ public DoubleType getType()
+ {
+ return new DoubleType();
+ }
};
for ( final Cursor< Pair< DoubleType, DoubleType > > c = Views.interval( Views.pair( data, converted ), data ).cursor(); c.hasNext(); )
diff --git a/src/test/java/net/imglib2/test/RandomImgsTest.java b/src/test/java/net/imglib2/test/RandomImgsTest.java
index 6175c4fca..3192870f9 100644
--- a/src/test/java/net/imglib2/test/RandomImgsTest.java
+++ b/src/test/java/net/imglib2/test/RandomImgsTest.java
@@ -57,7 +57,6 @@
import net.imglib2.type.numeric.real.DoubleType;
import net.imglib2.type.numeric.real.FloatType;
import net.imglib2.util.Intervals;
-import net.imglib2.util.Util;
import net.imglib2.view.Views;
import org.junit.Test;
@@ -139,7 +138,7 @@ private < T extends IntegerType< T > & NativeType< T > > void createAndTestInteg
private < T extends IntegerType< T > & NativeType< T > > void testIsRandomImageIntegerType( RandomAccessibleInterval< T > image )
{
- T type = Util.getTypeFromInterval( image );
+ T type = image.getType();
double min = type.getMinValue();
double max = type.getMaxValue();
double actualMin = fold( Double.POSITIVE_INFINITY, Math::min, Views.iterable( image ) );