Skip to content

Commit

Permalink
Merge pull request #651 from imagej/copy-boolean-types
Browse files Browse the repository at this point in the history
Allow copies across boolean types
  • Loading branch information
hinerm authored Jun 28, 2023
2 parents d2b4609 + 5d3d503 commit 7c6c029
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 0 deletions.
58 changes: 58 additions & 0 deletions src/main/java/net/imagej/ops/copy/CopyBooleanType.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
/*
* #%L
* ImageJ2 software for multidimensional image processing and analysis.
* %%
* Copyright (C) 2014 - 2022 ImageJ2 developers.
* %%
* 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.imagej.ops.copy;

import net.imagej.ops.Ops;
import net.imagej.ops.special.computer.AbstractUnaryComputerOp;
import net.imagej.ops.special.hybrid.AbstractUnaryHybridCF;
import net.imglib2.type.BooleanType;
import net.imglib2.type.Type;

import org.scijava.Priority;
import org.scijava.plugin.Plugin;

/**
* Copy {@link BooleanType} to another {@link BooleanType}
*
* @author Gabriel Selzer
* @param <B1>
* @param <B2>
*/
@Plugin(type = Ops.Copy.Type.class)
public class CopyBooleanType<B1 extends BooleanType<B1>, B2 extends BooleanType<B2>>
extends AbstractUnaryComputerOp<B1, B2> implements Ops.Copy.Type
{

@Override
public void compute(final B1 input, final B2 output) {
output.set(input.get());
}

}
12 changes: 12 additions & 0 deletions src/main/java/net/imagej/ops/copy/CopyNamespace.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
import net.imglib2.img.basictypeaccess.array.ArrayDataAccess;
import net.imglib2.roi.labeling.ImgLabeling;
import net.imglib2.roi.labeling.LabelingMapping;
import net.imglib2.type.BooleanType;
import net.imglib2.type.NativeType;
import net.imglib2.type.Type;
import net.imglib2.type.numeric.IntegerType;
Expand Down Expand Up @@ -185,4 +186,15 @@ public <T extends Type<T>> T type(final T out, final T in) {
in);
return result;
}

@OpMethod(op = net.imagej.ops.copy.CopyBooleanType.class)
public <B1 extends BooleanType<B1>, B2 extends BooleanType<B2>> B2 type(
final B2 out, final B1 in)
{
@SuppressWarnings("unchecked")
final B2 result = (B2) ops().run(net.imagej.ops.copy.CopyType.class, out,
in);
return result;
}

}
23 changes: 23 additions & 0 deletions src/test/java/net/imagej/ops/copy/CopyRAITest.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

import net.imagej.ops.AbstractOpTest;
import net.imagej.ops.special.hybrid.Hybrids;
Expand All @@ -43,6 +44,8 @@
import net.imglib2.img.Img;
import net.imglib2.img.array.ArrayImgFactory;
import net.imglib2.img.planar.PlanarImgFactory;
import net.imglib2.type.logic.BitType;
import net.imglib2.type.logic.NativeBoolType;
import net.imglib2.type.numeric.integer.UnsignedByteType;
import net.imglib2.view.IntervalView;
import net.imglib2.view.Views;
Expand All @@ -55,6 +58,7 @@
* Test {@link CopyRAI}.
*
* @author Tim-Oliver Buchholz (University of Konstanz)
* @author Gabriel Selzer
*/
public class CopyRAITest extends AbstractOpTest {

Expand Down Expand Up @@ -170,4 +174,23 @@ public void copyRAIDifferentSizeTest() {
assertEquals(ops.stats().mean(outFromPlanar).getRealDouble(), 100.0, delta);

}

@Test
public void copyBooleanTypesTest() {

final Img<NativeBoolType> in = ops.create().img(new FinalDimensions(size2),
new NativeBoolType());
Cursor<NativeBoolType> cursor = in.cursor();
while (cursor.hasNext()) {
cursor.next().set(true);
}

final Img<BitType> out = ops.create().img(new FinalDimensions(size2),
new BitType());

ops.run("copy.rai", out, in);

assertTrue(out.firstElement().get());

}
}

0 comments on commit 7c6c029

Please sign in to comment.