diff --git a/src/main/java/net/imglib2/type/volatiles/AbstractVolatileNativeNumericType.java b/src/main/java/net/imglib2/type/volatiles/AbstractVolatileNativeNumericType.java new file mode 100644 index 0000000000000000000000000000000000000000..22673a77b086715cb6545c748287e33252151b82 --- /dev/null +++ b/src/main/java/net/imglib2/type/volatiles/AbstractVolatileNativeNumericType.java @@ -0,0 +1,104 @@ +/* + * #%L + * ImgLib2: a general-purpose, multidimensional image processing library. + * %% + * Copyright (C) 2009 - 2012 Stephan Preibisch, Stephan Saalfeld, Tobias + * Pietzsch, Albert Cardona, Barry DeZonia, Curtis Rueden, Lee Kamentsky, Larry + * Lindsey, Johannes Schindelin, Christian Dietz, Grant Harris, Jean-Yves + * Tinevez, Steffen Jaensch, Mark Longair, Nick Perry, and Jan Funke. + * %% + * 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. + * + * The views and conclusions contained in the software and documentation are + * those of the authors and should not be interpreted as representing official + * policies, either expressed or implied, of any organization. + * #L% + */ + +package net.imglib2.type.volatiles; + +import net.imglib2.type.NativeType; +import net.imglib2.type.numeric.NumericType; + +/** + * Abstract base class for {@link VolatileNumericType}s that wrap + * {@link NativeType native} {@link NumericType}s. + * + * @param <N> + * wrapped {@link NativeType native} {@link NumericsType}. + * @param <T> + * type of derived concrete class. + * + * @author Tobias Pietzsch <tobias.pietzsch@gmail.com> + * @author Stephan Saalfeld <saalfelds@janelia.hhmi.org> + */ +public abstract class AbstractVolatileNativeNumericType< N extends NumericType< N > & NativeType< N >, T extends AbstractVolatileNativeNumericType< N, T > > + extends AbstractVolatileNumericType< N, T > + implements NativeType< T > +{ + public AbstractVolatileNativeNumericType( final N t, final boolean valid ) + { + super( t, valid ); + } + + @Override + public int getEntitiesPerPixel() + { + return t.getEntitiesPerPixel(); + } + + @Override + public void updateIndex( final int i ) + { + t.updateIndex( i ); + } + + @Override + public int getIndex() + { + return t.getIndex(); + } + + @Override + public void incIndex() + { + t.incIndex(); + } + + @Override + public void incIndex( final int increment ) + { + t.incIndex( increment ); + } + + @Override + public void decIndex() + { + t.decIndex(); + } + + @Override + public void decIndex( final int decrement ) + { + t.decIndex( decrement ); + } +} diff --git a/src/main/java/net/imglib2/type/volatiles/VolatileARGBType.java b/src/main/java/net/imglib2/type/volatiles/VolatileARGBType.java new file mode 100644 index 0000000000000000000000000000000000000000..d93e1886c9410800425481d41ba97fd12ae3095d --- /dev/null +++ b/src/main/java/net/imglib2/type/volatiles/VolatileARGBType.java @@ -0,0 +1,108 @@ +package net.imglib2.type.volatiles; + +import net.imglib2.Volatile; +import net.imglib2.img.NativeImg; +import net.imglib2.img.NativeImgFactory; +import net.imglib2.img.basictypeaccess.IntAccess; +import net.imglib2.img.basictypeaccess.volatiles.VolatileIntAccess; +import net.imglib2.img.basictypeaccess.volatiles.VolatileShortAccess; +import net.imglib2.img.basictypeaccess.volatiles.array.VolatileIntArray; +import net.imglib2.type.numeric.ARGBType; +import net.imglib2.type.numeric.integer.UnsignedShortType; + +/** + * A {@link Volatile} variant of {@link UnsignedShortType}. It uses an + * underlying {@link UnsignedShortType} that maps into a + * {@link VolatileShortAccess}. + * + * @author Stephan Saalfeld <saalfelds@janelia.hhmi.org> + * @author Tobias Pietzsch <tobias.pietzsch@gmail.com> + */ +public class VolatileARGBType extends AbstractVolatileNativeNumericType< ARGBType, VolatileARGBType > +{ + final protected NativeImg< ?, ? extends VolatileIntAccess > img; + + private static class WrappedARGBType extends ARGBType + { + public WrappedARGBType( final NativeImg< ?, ? extends IntAccess > img ) + { + super( img ); + } + + public WrappedARGBType( final IntAccess access ) + { + super( access ); + } + + public void setAccess( final IntAccess access ) + { + dataAccess = access; + } + } + + // this is the constructor if you want it to read from an array + public VolatileARGBType( final NativeImg< ?, ? extends VolatileIntAccess > img ) + { + super( new WrappedARGBType( img ), false ); + this.img = img; + } + + // this is the constructor if you want to specify the dataAccess + public VolatileARGBType( final VolatileIntAccess access ) + { + super( new WrappedARGBType( access ), access.isValid() ); + this.img = null; + } + + // this is the constructor if you want it to be a variable + public VolatileARGBType( final int value ) + { + this( new VolatileIntArray( 1, true ) ); + set( value ); + } + + // this is the constructor if you want it to be a variable + public VolatileARGBType() + { + this( 0 ); + } + + public void set( final int value ) + { + get().set( value ); + } + + @Override + public void updateContainer( final Object c ) + { + final VolatileIntAccess a = img.update( c ); + ( ( WrappedARGBType ) t ).setAccess( a ); + setValid( a.isValid() ); + } + + @Override + public NativeImg< VolatileARGBType, ? extends VolatileIntAccess > createSuitableNativeImg( final NativeImgFactory< VolatileARGBType > storageFactory, final long[] dim ) + { + throw new UnsupportedOperationException(); + } + + @Override + public VolatileARGBType duplicateTypeOnSameNativeImg() + { + return new VolatileARGBType( img ); + } + + @Override + public VolatileARGBType createVariable() + { + return new VolatileARGBType(); + } + + @Override + public VolatileARGBType copy() + { + final VolatileARGBType v = createVariable(); + v.set( this ); + return v; + } +} diff --git a/src/main/java/net/imglib2/type/volatiles/VolatileUnsignedShortType.java b/src/main/java/net/imglib2/type/volatiles/VolatileUnsignedShortType.java index 824b2e1841865b544c2d2f2e20beb740cba56b5e..bc1e0cd77cc1ca14db86cfb6b1c6f2fba17edf0c 100644 --- a/src/main/java/net/imglib2/type/volatiles/VolatileUnsignedShortType.java +++ b/src/main/java/net/imglib2/type/volatiles/VolatileUnsignedShortType.java @@ -25,6 +25,7 @@ public class VolatileUnsignedShortType extends AbstractVolatileNativeRealType< U { super( img ); } + public WrappedUnsignedShortType( final ShortAccess access ) { super( access );