From 8ee318bc516e0b165277967446b749f2a1832423 Mon Sep 17 00:00:00 2001 From: Alison Walter Date: Fri, 27 Jan 2017 15:04:40 -0600 Subject: [PATCH] Update RealOperators to use generics This allows the operator classes to be used for BitType or BoolType. --- .../operators/AbstractRealBinaryOperator.java | 18 ++++++------ ...actRealBinaryOperatorRealRandomAccess.java | 25 ++++++++-------- .../roi/operators/RealBinaryExclusiveOr.java | 17 ++++++----- .../roi/operators/RealBinaryIntersection.java | 17 ++++++----- .../roi/operators/RealBinaryOperator.java | 4 +-- .../RealBinaryOperatorRealRandomAccess.java | 8 ++--- .../roi/operators/RealBinarySubtraction.java | 18 ++++++------ .../roi/operators/RealBinaryUnion.java | 17 ++++++----- .../imglib2/roi/operators/RealUnaryNot.java | 29 ++++++++++--------- .../roi/operators/RealUnaryOperator.java | 4 +-- 10 files changed, 81 insertions(+), 76 deletions(-) diff --git a/src/main/java/net/imglib2/roi/operators/AbstractRealBinaryOperator.java b/src/main/java/net/imglib2/roi/operators/AbstractRealBinaryOperator.java index fbbb0d627..c9f8076b8 100644 --- a/src/main/java/net/imglib2/roi/operators/AbstractRealBinaryOperator.java +++ b/src/main/java/net/imglib2/roi/operators/AbstractRealBinaryOperator.java @@ -38,7 +38,7 @@ import net.imglib2.RealPositionable; import net.imglib2.RealRandomAccess; import net.imglib2.RealRandomAccessibleRealInterval; -import net.imglib2.type.logic.BoolType; +import net.imglib2.type.BooleanType; /** * This is an abstract class as base for all binary operators which allow @@ -50,13 +50,13 @@ * @version 1.0.0 Jan 14, 2016 * */ -public abstract class AbstractRealBinaryOperator extends AbstractRealInterval implements RealBinaryOperator +public abstract class AbstractRealBinaryOperator< B extends BooleanType< B > > extends AbstractRealInterval implements RealBinaryOperator< B > { - protected final RealRandomAccessibleRealInterval< BoolType > leftOperand; + protected final RealRandomAccessibleRealInterval< B > leftOperand; - protected final RealRandomAccessibleRealInterval< BoolType > rightOperand; + protected final RealRandomAccessibleRealInterval< B > rightOperand; - public AbstractRealBinaryOperator( final RealRandomAccessibleRealInterval< BoolType > leftOperand, final RealRandomAccessibleRealInterval< BoolType > rightOperand ) + public AbstractRealBinaryOperator( final RealRandomAccessibleRealInterval< B > leftOperand, final RealRandomAccessibleRealInterval< B > rightOperand ) { super( leftOperand.numDimensions() ); this.leftOperand = leftOperand; @@ -64,10 +64,10 @@ public AbstractRealBinaryOperator( final RealRandomAccessibleRealInterval< BoolT } @Override - public abstract RealRandomAccess< BoolType > realRandomAccess(); + public abstract RealRandomAccess< B > realRandomAccess(); @Override - public RealRandomAccess< BoolType > realRandomAccess( final RealInterval interval ) + public RealRandomAccess< B > realRandomAccess( final RealInterval interval ) { return realRandomAccess(); } @@ -113,13 +113,13 @@ public void realMax( final RealPositionable realMax ) } @Override - public RealRandomAccessibleRealInterval< BoolType > getA() + public RealRandomAccessibleRealInterval< B > getA() { return leftOperand; } @Override - public RealRandomAccessibleRealInterval< BoolType > getB() + public RealRandomAccessibleRealInterval< B > getB() { return rightOperand; } diff --git a/src/main/java/net/imglib2/roi/operators/AbstractRealBinaryOperatorRealRandomAccess.java b/src/main/java/net/imglib2/roi/operators/AbstractRealBinaryOperatorRealRandomAccess.java index 727b14bf4..538188aad 100644 --- a/src/main/java/net/imglib2/roi/operators/AbstractRealBinaryOperatorRealRandomAccess.java +++ b/src/main/java/net/imglib2/roi/operators/AbstractRealBinaryOperatorRealRandomAccess.java @@ -36,6 +36,7 @@ import net.imglib2.RealPoint; import net.imglib2.RealRandomAccess; import net.imglib2.RealRandomAccessibleRealInterval; +import net.imglib2.type.BooleanType; import net.imglib2.type.logic.BoolType; import net.imglib2.util.Util; @@ -45,23 +46,23 @@ * * @author Alison Walter */ -public abstract class AbstractRealBinaryOperatorRealRandomAccess extends RealPoint implements RealBinaryOperatorRealRandomAccess +public abstract class AbstractRealBinaryOperatorRealRandomAccess< B extends BooleanType< B > > extends RealPoint implements RealBinaryOperatorRealRandomAccess< B > { - private final RealRandomAccess< BoolType > leftOperandRA; + private final RealRandomAccess< B > leftOperandRA; - private final RealRandomAccess< BoolType > rightOperandRA; + private final RealRandomAccess< B > rightOperandRA; - protected final BoolType type; + protected final B type; - public AbstractRealBinaryOperatorRealRandomAccess( final RealRandomAccessibleRealInterval< BoolType > leftOperand, final RealRandomAccessibleRealInterval< BoolType > rightOperand ) + public AbstractRealBinaryOperatorRealRandomAccess( final RealRandomAccessibleRealInterval< B > leftOperand, final RealRandomAccessibleRealInterval< B > rightOperand ) { super( leftOperand.numDimensions() ); this.leftOperandRA = leftOperand.realRandomAccess(); this.rightOperandRA = rightOperand.realRandomAccess(); - type = new BoolType(); + type = Util.getTypeFromRealInterval( leftOperand ).copy(); } - protected AbstractRealBinaryOperatorRealRandomAccess( final RealBinaryOperatorRealRandomAccess rborra ) + protected AbstractRealBinaryOperatorRealRandomAccess( final RealBinaryOperatorRealRandomAccess< B > rborra ) { super( rborra.numDimensions() ); leftOperandRA = rborra.getLeftOperandRealRandomAccess(); @@ -70,27 +71,27 @@ protected AbstractRealBinaryOperatorRealRandomAccess( final RealBinaryOperatorRe } @Override - public RealRandomAccess< BoolType > getLeftOperandRealRandomAccess() + public RealRandomAccess< B > getLeftOperandRealRandomAccess() { return leftOperandRA; } @Override - public RealRandomAccess< BoolType > getRightOperandRealRandomAccess() + public RealRandomAccess< B > getRightOperandRealRandomAccess() { return rightOperandRA; } @Override - public RealRandomAccess< BoolType > copyRealRandomAccess() + public RealRandomAccess< B > copyRealRandomAccess() { return copy(); } @Override - public abstract BoolType get(); + public abstract B get(); @Override - public abstract RealRandomAccess< BoolType > copy(); + public abstract RealRandomAccess< B > copy(); } diff --git a/src/main/java/net/imglib2/roi/operators/RealBinaryExclusiveOr.java b/src/main/java/net/imglib2/roi/operators/RealBinaryExclusiveOr.java index ee0bd6895..80d9bbe45 100644 --- a/src/main/java/net/imglib2/roi/operators/RealBinaryExclusiveOr.java +++ b/src/main/java/net/imglib2/roi/operators/RealBinaryExclusiveOr.java @@ -35,6 +35,7 @@ import net.imglib2.RealRandomAccess; import net.imglib2.RealRandomAccessibleRealInterval; +import net.imglib2.type.BooleanType; import net.imglib2.type.logic.BoolType; /** @@ -46,26 +47,26 @@ * @version 1.0.0 Jan 14, 2016 * */ -public class RealBinaryExclusiveOr extends AbstractRealBinaryOperator +public class RealBinaryExclusiveOr< B extends BooleanType< B > > extends AbstractRealBinaryOperator< B > { - public RealBinaryExclusiveOr( final RealRandomAccessibleRealInterval< BoolType > leftOperand, final RealRandomAccessibleRealInterval< BoolType > rightOperand ) + public RealBinaryExclusiveOr( final RealRandomAccessibleRealInterval< B > leftOperand, final RealRandomAccessibleRealInterval< B > rightOperand ) { super( leftOperand, rightOperand ); } @Override - public RealRandomAccess< BoolType > realRandomAccess() + public RealRandomAccess< B > realRandomAccess() { return new RealBinaryExclusiveOrRealRandomAccess( leftOperand, rightOperand ); } - private class RealBinaryExclusiveOrRealRandomAccess extends AbstractRealBinaryOperatorRealRandomAccess + private class RealBinaryExclusiveOrRealRandomAccess extends AbstractRealBinaryOperatorRealRandomAccess< B > { - private final RealRandomAccess< BoolType > leftRRA; + private final RealRandomAccess< B > leftRRA; - private final RealRandomAccess< BoolType > rightRRA; + private final RealRandomAccess< B > rightRRA; - public RealBinaryExclusiveOrRealRandomAccess( final RealRandomAccessibleRealInterval< BoolType > leftOperand, final RealRandomAccessibleRealInterval< BoolType > rightOperand ) + public RealBinaryExclusiveOrRealRandomAccess( final RealRandomAccessibleRealInterval< B > leftOperand, final RealRandomAccessibleRealInterval< B > rightOperand ) { super( leftOperand, rightOperand ); leftRRA = getLeftOperandRealRandomAccess(); @@ -80,7 +81,7 @@ private RealBinaryExclusiveOrRealRandomAccess( final RealBinaryExclusiveOrRealRa } @Override - public BoolType get() + public B get() { leftRRA.setPosition( this ); rightRRA.setPosition( this ); diff --git a/src/main/java/net/imglib2/roi/operators/RealBinaryIntersection.java b/src/main/java/net/imglib2/roi/operators/RealBinaryIntersection.java index 618841bbf..85cb170b4 100644 --- a/src/main/java/net/imglib2/roi/operators/RealBinaryIntersection.java +++ b/src/main/java/net/imglib2/roi/operators/RealBinaryIntersection.java @@ -35,6 +35,7 @@ import net.imglib2.RealRandomAccess; import net.imglib2.RealRandomAccessibleRealInterval; +import net.imglib2.type.BooleanType; import net.imglib2.type.logic.BoolType; /** @@ -47,26 +48,26 @@ * @version 1.0.0 Jan 14, 2016 * */ -public class RealBinaryIntersection extends AbstractRealBinaryOperator +public class RealBinaryIntersection< B extends BooleanType< B > > extends AbstractRealBinaryOperator< B > { - public RealBinaryIntersection( final RealRandomAccessibleRealInterval< BoolType > leftOperand, final RealRandomAccessibleRealInterval< BoolType > rightOperand ) + public RealBinaryIntersection( final RealRandomAccessibleRealInterval< B > leftOperand, final RealRandomAccessibleRealInterval< B > rightOperand ) { super( leftOperand, rightOperand ); } @Override - public RealRandomAccess< BoolType > realRandomAccess() + public RealRandomAccess< B > realRandomAccess() { return new RealBinaryIntersectionRealRandomAccess( leftOperand, rightOperand ); } - private class RealBinaryIntersectionRealRandomAccess extends AbstractRealBinaryOperatorRealRandomAccess + private class RealBinaryIntersectionRealRandomAccess extends AbstractRealBinaryOperatorRealRandomAccess< B > { - private final RealRandomAccess< BoolType > leftRRA; + private final RealRandomAccess< B > leftRRA; - private final RealRandomAccess< BoolType > rightRRA; + private final RealRandomAccess< B > rightRRA; - public RealBinaryIntersectionRealRandomAccess( final RealRandomAccessibleRealInterval< BoolType > leftOperand, final RealRandomAccessibleRealInterval< BoolType > rightOperand ) + public RealBinaryIntersectionRealRandomAccess( final RealRandomAccessibleRealInterval< B > leftOperand, final RealRandomAccessibleRealInterval< B > rightOperand ) { super( leftOperand, rightOperand ); leftRRA = getLeftOperandRealRandomAccess(); @@ -81,7 +82,7 @@ private RealBinaryIntersectionRealRandomAccess( final RealBinaryIntersectionReal } @Override - public BoolType get() + public B get() { leftRRA.setPosition( this ); rightRRA.setPosition( this ); diff --git a/src/main/java/net/imglib2/roi/operators/RealBinaryOperator.java b/src/main/java/net/imglib2/roi/operators/RealBinaryOperator.java index bbc7f1aae..8858f9b62 100644 --- a/src/main/java/net/imglib2/roi/operators/RealBinaryOperator.java +++ b/src/main/java/net/imglib2/roi/operators/RealBinaryOperator.java @@ -35,7 +35,7 @@ package net.imglib2.roi.operators; import net.imglib2.RealRandomAccessibleRealInterval; -import net.imglib2.type.logic.BoolType; +import net.imglib2.type.BooleanType; import net.imglib2.util.Pair; /** @@ -45,5 +45,5 @@ * * @author Alison Walter */ -public interface RealBinaryOperator extends RealRandomAccessibleRealInterval< BoolType >, Pair< RealRandomAccessibleRealInterval< BoolType >, RealRandomAccessibleRealInterval< BoolType > > +public interface RealBinaryOperator< B extends BooleanType< B > > extends RealRandomAccessibleRealInterval< B >, Pair< RealRandomAccessibleRealInterval< B >, RealRandomAccessibleRealInterval< B > > {} diff --git a/src/main/java/net/imglib2/roi/operators/RealBinaryOperatorRealRandomAccess.java b/src/main/java/net/imglib2/roi/operators/RealBinaryOperatorRealRandomAccess.java index dc8a2bbf5..d41ec046d 100644 --- a/src/main/java/net/imglib2/roi/operators/RealBinaryOperatorRealRandomAccess.java +++ b/src/main/java/net/imglib2/roi/operators/RealBinaryOperatorRealRandomAccess.java @@ -34,17 +34,17 @@ package net.imglib2.roi.operators; import net.imglib2.RealRandomAccess; -import net.imglib2.type.logic.BoolType; +import net.imglib2.type.BooleanType; /** * Represents a {@link RealRandomAccess} for combined regions of interest. * * @author Alison Walter */ -public interface RealBinaryOperatorRealRandomAccess extends RealRandomAccess< BoolType > +public interface RealBinaryOperatorRealRandomAccess< B extends BooleanType< B > > extends RealRandomAccess< B > { - RealRandomAccess< BoolType > getLeftOperandRealRandomAccess(); + RealRandomAccess< B > getLeftOperandRealRandomAccess(); - RealRandomAccess< BoolType > getRightOperandRealRandomAccess(); + RealRandomAccess< B > getRightOperandRealRandomAccess(); } diff --git a/src/main/java/net/imglib2/roi/operators/RealBinarySubtraction.java b/src/main/java/net/imglib2/roi/operators/RealBinarySubtraction.java index 2d7acac49..e5da7f5f0 100644 --- a/src/main/java/net/imglib2/roi/operators/RealBinarySubtraction.java +++ b/src/main/java/net/imglib2/roi/operators/RealBinarySubtraction.java @@ -35,7 +35,7 @@ import net.imglib2.RealRandomAccess; import net.imglib2.RealRandomAccessibleRealInterval; -import net.imglib2.type.logic.BoolType; +import net.imglib2.type.BooleanType; /** * This class represents the difference of two regions of interest. @@ -45,26 +45,26 @@ * @version 1.0.0 Jan 14, 2016 * */ -public class RealBinarySubtraction extends AbstractRealBinaryOperator +public class RealBinarySubtraction< B extends BooleanType< B > > extends AbstractRealBinaryOperator< B > { - public RealBinarySubtraction( final RealRandomAccessibleRealInterval< BoolType > leftOperand, final RealRandomAccessibleRealInterval< BoolType > rightOperand ) + public RealBinarySubtraction( final RealRandomAccessibleRealInterval< B > leftOperand, final RealRandomAccessibleRealInterval< B > rightOperand ) { super( leftOperand, rightOperand ); } @Override - public RealRandomAccess< BoolType > realRandomAccess() + public RealRandomAccess< B > realRandomAccess() { return new RealBinarySubtractionRealRandomAccess( leftOperand, rightOperand ); } - private class RealBinarySubtractionRealRandomAccess extends AbstractRealBinaryOperatorRealRandomAccess + private class RealBinarySubtractionRealRandomAccess extends AbstractRealBinaryOperatorRealRandomAccess< B > { - private final RealRandomAccess< BoolType > leftRRA; + private final RealRandomAccess< B > leftRRA; - private final RealRandomAccess< BoolType > rightRRA; + private final RealRandomAccess< B > rightRRA; - public RealBinarySubtractionRealRandomAccess( final RealRandomAccessibleRealInterval< BoolType > leftOperand, final RealRandomAccessibleRealInterval< BoolType > rightOperand ) + public RealBinarySubtractionRealRandomAccess( final RealRandomAccessibleRealInterval< B > leftOperand, final RealRandomAccessibleRealInterval< B > rightOperand ) { super( leftOperand, rightOperand ); leftRRA = getLeftOperandRealRandomAccess(); @@ -79,7 +79,7 @@ private RealBinarySubtractionRealRandomAccess( final RealBinarySubtractionRealRa } @Override - public BoolType get() + public B get() { leftRRA.setPosition( this ); rightRRA.setPosition( this ); diff --git a/src/main/java/net/imglib2/roi/operators/RealBinaryUnion.java b/src/main/java/net/imglib2/roi/operators/RealBinaryUnion.java index d7ea319f4..a34844965 100644 --- a/src/main/java/net/imglib2/roi/operators/RealBinaryUnion.java +++ b/src/main/java/net/imglib2/roi/operators/RealBinaryUnion.java @@ -35,6 +35,7 @@ import net.imglib2.RealRandomAccess; import net.imglib2.RealRandomAccessibleRealInterval; +import net.imglib2.type.BooleanType; import net.imglib2.type.logic.BoolType; /** @@ -47,26 +48,26 @@ * @version 1.0.0 Jan 14, 2016 * */ -public class RealBinaryUnion extends AbstractRealBinaryOperator +public class RealBinaryUnion< B extends BooleanType< B > > extends AbstractRealBinaryOperator< B > { - public RealBinaryUnion( final RealRandomAccessibleRealInterval< BoolType > leftOperand, final RealRandomAccessibleRealInterval< BoolType > rightOperand ) + public RealBinaryUnion( final RealRandomAccessibleRealInterval< B > leftOperand, final RealRandomAccessibleRealInterval< B > rightOperand ) { super( leftOperand, rightOperand ); } @Override - public RealRandomAccess< BoolType > realRandomAccess() + public RealRandomAccess< B > realRandomAccess() { return new RealBinaryUnionRealRandomAccess( leftOperand, rightOperand ); } - private class RealBinaryUnionRealRandomAccess extends AbstractRealBinaryOperatorRealRandomAccess + private class RealBinaryUnionRealRandomAccess extends AbstractRealBinaryOperatorRealRandomAccess< B > { - private final RealRandomAccess< BoolType > leftRRA; + private final RealRandomAccess< B > leftRRA; - private final RealRandomAccess< BoolType > rightRRA; + private final RealRandomAccess< B > rightRRA; - public RealBinaryUnionRealRandomAccess( final RealRandomAccessibleRealInterval< BoolType > leftOperand, final RealRandomAccessibleRealInterval< BoolType > rightOperand ) + public RealBinaryUnionRealRandomAccess( final RealRandomAccessibleRealInterval< B > leftOperand, final RealRandomAccessibleRealInterval< B > rightOperand ) { super( leftOperand, rightOperand ); leftRRA = getLeftOperandRealRandomAccess(); @@ -81,7 +82,7 @@ private RealBinaryUnionRealRandomAccess( final RealBinaryUnionRealRandomAccess r } @Override - public BoolType get() + public B get() { leftRRA.setPosition( this ); rightRRA.setPosition( this ); diff --git a/src/main/java/net/imglib2/roi/operators/RealUnaryNot.java b/src/main/java/net/imglib2/roi/operators/RealUnaryNot.java index 5960ffd11..c140c2e24 100644 --- a/src/main/java/net/imglib2/roi/operators/RealUnaryNot.java +++ b/src/main/java/net/imglib2/roi/operators/RealUnaryNot.java @@ -39,7 +39,8 @@ import net.imglib2.RealPositionable; import net.imglib2.RealRandomAccess; import net.imglib2.RealRandomAccessibleRealInterval; -import net.imglib2.type.logic.BoolType; +import net.imglib2.type.BooleanType; +import net.imglib2.util.Util; /** * @@ -53,24 +54,24 @@ * @version 1.0.0 Jan 14, 2016 * */ -public class RealUnaryNot extends AbstractRealInterval implements RealUnaryOperator +public class RealUnaryNot< B extends BooleanType< B > > extends AbstractRealInterval implements RealUnaryOperator< B > { - protected RealRandomAccessibleRealInterval< BoolType > operand; + protected RealRandomAccessibleRealInterval< B > operand; - public RealUnaryNot( final RealRandomAccessibleRealInterval< BoolType > operand ) + public RealUnaryNot( final RealRandomAccessibleRealInterval< B > operand ) { super( operand.numDimensions() ); this.operand = operand; } @Override - public RealRandomAccess< BoolType > realRandomAccess() + public RealRandomAccess< B > realRandomAccess() { return new RealUnaryNotRealRandomAccess( operand ); } @Override - public RealRandomAccess< BoolType > realRandomAccess( final RealInterval interval ) + public RealRandomAccess< B > realRandomAccess( final RealInterval interval ) { return realRandomAccess(); @@ -116,22 +117,22 @@ public void realMax( final RealPositionable realMax ) realMax.setPosition( realMax( d ), d ); } - public RealRandomAccessibleRealInterval< BoolType > getSource() + public RealRandomAccessibleRealInterval< B > getSource() { return operand; } - private class RealUnaryNotRealRandomAccess extends RealPoint implements RealRandomAccess< BoolType > + private class RealUnaryNotRealRandomAccess extends RealPoint implements RealRandomAccess< B > { - private final RealRandomAccess< BoolType > operandRA; + private final RealRandomAccess< B > operandRA; - private final BoolType type; + private final B type; - public RealUnaryNotRealRandomAccess( final RealRandomAccessibleRealInterval< BoolType > operand ) + public RealUnaryNotRealRandomAccess( final RealRandomAccessibleRealInterval< B > operand ) { super( operand.numDimensions() ); operandRA = operand.realRandomAccess(); - type = new BoolType(); + type = Util.getTypeFromRealInterval( operand ).copy(); } private RealUnaryNotRealRandomAccess( final RealUnaryNotRealRandomAccess rbnrra ) @@ -142,7 +143,7 @@ private RealUnaryNotRealRandomAccess( final RealUnaryNotRealRandomAccess rbnrra } @Override - public BoolType get() + public B get() { operandRA.setPosition( this ); type.set( !operandRA.get().get() ); @@ -156,7 +157,7 @@ public RealUnaryNotRealRandomAccess copy() } @Override - public RealRandomAccess< BoolType > copyRealRandomAccess() + public RealRandomAccess< B > copyRealRandomAccess() { return copy(); } diff --git a/src/main/java/net/imglib2/roi/operators/RealUnaryOperator.java b/src/main/java/net/imglib2/roi/operators/RealUnaryOperator.java index 1b402e4be..9127b8a2f 100644 --- a/src/main/java/net/imglib2/roi/operators/RealUnaryOperator.java +++ b/src/main/java/net/imglib2/roi/operators/RealUnaryOperator.java @@ -34,7 +34,7 @@ package net.imglib2.roi.operators; import net.imglib2.RealRandomAccessibleRealInterval; -import net.imglib2.type.logic.BoolType; +import net.imglib2.type.BooleanType; /** * A {@link RealRandomAccessibleRealInterval} created by performing a unary @@ -42,5 +42,5 @@ * * @author Alison Walter */ -public interface RealUnaryOperator extends RealRandomAccessibleRealInterval< BoolType > +public interface RealUnaryOperator< B extends BooleanType< B > > extends RealRandomAccessibleRealInterval< B > {}