From b0d678e4b1ee6507f3d1b7716fdf7ee29465f651 Mon Sep 17 00:00:00 2001 From: Stephan Saalfeld <saalfelds@janelia.hhmi.org> Date: Tue, 4 Mar 2014 11:33:12 -0500 Subject: [PATCH] added VolatileUnsignedByteType... more to come I guess... --- .../volatiles/VolatileByteAccess.java | 11 ++ .../volatiles/array/VolatileByteArray.java | 52 +++++++++ .../volatiles/array/VolatileShortArray.java | 2 + .../volatiles/VolatileUnsignedByteType.java | 106 ++++++++++++++++++ 4 files changed, 171 insertions(+) create mode 100644 src/main/java/net/imglib2/img/basictypeaccess/volatiles/VolatileByteAccess.java create mode 100644 src/main/java/net/imglib2/img/basictypeaccess/volatiles/array/VolatileByteArray.java create mode 100644 src/main/java/net/imglib2/type/volatiles/VolatileUnsignedByteType.java diff --git a/src/main/java/net/imglib2/img/basictypeaccess/volatiles/VolatileByteAccess.java b/src/main/java/net/imglib2/img/basictypeaccess/volatiles/VolatileByteAccess.java new file mode 100644 index 00000000..9a79fbdb --- /dev/null +++ b/src/main/java/net/imglib2/img/basictypeaccess/volatiles/VolatileByteAccess.java @@ -0,0 +1,11 @@ +package net.imglib2.img.basictypeaccess.volatiles; + +import net.imglib2.img.basictypeaccess.ByteAccess; + + +/** + * @author Stephan Saalfeld <saalfelds@janelia.hhmi.org> + * @author Tobias Pietzsch <tobias.pietzsch@gmail.com> + */ +public interface VolatileByteAccess extends ByteAccess, VolatileAccess +{} diff --git a/src/main/java/net/imglib2/img/basictypeaccess/volatiles/array/VolatileByteArray.java b/src/main/java/net/imglib2/img/basictypeaccess/volatiles/array/VolatileByteArray.java new file mode 100644 index 00000000..ebec4451 --- /dev/null +++ b/src/main/java/net/imglib2/img/basictypeaccess/volatiles/array/VolatileByteArray.java @@ -0,0 +1,52 @@ +package net.imglib2.img.basictypeaccess.volatiles.array; + +import net.imglib2.img.basictypeaccess.volatiles.VolatileByteAccess; + +/** + * A {@link ByteArray} with an {@link #isValid()} flag. + * + * @author Stephan Saalfeld <saalfelds@janelia.hhmi.org> + * @author Tobias Pietzsch <tobias.pietzsch@gmail.com> + */ +public class VolatileByteArray extends AbstractVolatileArray< VolatileByteArray > implements VolatileByteAccess +{ + private static final long serialVersionUID = -2609245209721069962L; + + protected byte[] data; + + public VolatileByteArray( final int numEntities, final boolean isValid ) + { + super( isValid ); + this.data = new byte[ numEntities ]; + } + + public VolatileByteArray( final byte[] data, final boolean isValid ) + { + super( isValid ); + this.data = data; + } + + @Override + public byte getValue( final int index ) + { + return data[ index ]; + } + + @Override + public void setValue( final int index, final byte value ) + { + data[ index ] = value; + } + + @Override + public VolatileByteArray createArray( final int numEntities ) + { + return new VolatileByteArray( numEntities, true ); + } + + @Override + public byte[] getCurrentStorageArray() + { + return data; + } +} diff --git a/src/main/java/net/imglib2/img/basictypeaccess/volatiles/array/VolatileShortArray.java b/src/main/java/net/imglib2/img/basictypeaccess/volatiles/array/VolatileShortArray.java index 869d891b..5f754222 100644 --- a/src/main/java/net/imglib2/img/basictypeaccess/volatiles/array/VolatileShortArray.java +++ b/src/main/java/net/imglib2/img/basictypeaccess/volatiles/array/VolatileShortArray.java @@ -10,6 +10,8 @@ import net.imglib2.img.basictypeaccess.volatiles.VolatileShortAccess; */ public class VolatileShortArray extends AbstractVolatileArray< VolatileShortArray > implements VolatileShortAccess { + private static final long serialVersionUID = -8460450507170281183L; + protected short data[]; public VolatileShortArray( final int numEntities, final boolean isValid ) diff --git a/src/main/java/net/imglib2/type/volatiles/VolatileUnsignedByteType.java b/src/main/java/net/imglib2/type/volatiles/VolatileUnsignedByteType.java new file mode 100644 index 00000000..a2a5a43a --- /dev/null +++ b/src/main/java/net/imglib2/type/volatiles/VolatileUnsignedByteType.java @@ -0,0 +1,106 @@ +package net.imglib2.type.volatiles; + +import net.imglib2.Volatile; +import net.imglib2.img.NativeImg; +import net.imglib2.img.NativeImgFactory; +import net.imglib2.img.basictypeaccess.ByteAccess; +import net.imglib2.img.basictypeaccess.volatiles.VolatileByteAccess; +import net.imglib2.img.basictypeaccess.volatiles.array.VolatileByteArray; +import net.imglib2.type.numeric.integer.UnsignedByteType; + +/** + * A {@link Volatile} variant of {@link UnsignedByteType}. It uses an + * underlying {@link UnsignedByteType} that maps into a + * {@link VolatileByteAccess}. + * + * @author Stephan Saalfeld <saalfelds@janelia.hhmi.org> + * @author Tobias Pietzsch <tobias.pietzsch@gmail.com> + */ +public class VolatileUnsignedByteType extends AbstractVolatileNativeRealType< UnsignedByteType, VolatileUnsignedByteType > +{ + final protected NativeImg< ?, ? extends VolatileByteAccess > img; + + private static class WrappedUnsignedByteType extends UnsignedByteType + { + public WrappedUnsignedByteType( final NativeImg<?, ? extends ByteAccess> img ) + { + super( img ); + } + + public WrappedUnsignedByteType( final ByteAccess access ) + { + super( access ); + } + + public void setAccess( final ByteAccess access ) + { + dataAccess = access; + } + } + + // this is the constructor if you want it to read from an array + public VolatileUnsignedByteType( final NativeImg< ?, ? extends VolatileByteAccess > img ) + { + super( new WrappedUnsignedByteType( img ), false ); + this.img = img; + } + + // this is the constructor if you want to specify the dataAccess + public VolatileUnsignedByteType( final VolatileByteAccess access ) + { + super( new WrappedUnsignedByteType( access ), access.isValid() ); + this.img = null; + } + + // this is the constructor if you want it to be a variable + public VolatileUnsignedByteType( final int value ) + { + this( new VolatileByteArray( 1, true ) ); + set( value ); + } + + // this is the constructor if you want it to be a variable + public VolatileUnsignedByteType() + { + this( 0 ); + } + + public void set( final int value ) + { + get().set( value ); + } + + @Override + public void updateContainer( final Object c ) + { + final VolatileByteAccess a = img.update( c ); + ( ( WrappedUnsignedByteType )t ).setAccess( a ); + setValid( a.isValid() ); + } + + @Override + public NativeImg< VolatileUnsignedByteType, ? extends VolatileByteAccess > createSuitableNativeImg( final NativeImgFactory< VolatileUnsignedByteType > storageFactory, final long[] dim ) + { + throw new UnsupportedOperationException(); + } + + @Override + public VolatileUnsignedByteType duplicateTypeOnSameNativeImg() + { + return new VolatileUnsignedByteType( img ); + } + + @Override + public VolatileUnsignedByteType createVariable() + { + return new VolatileUnsignedByteType(); + } + + @Override + public VolatileUnsignedByteType copy() + { + final VolatileUnsignedByteType v = createVariable(); + v.set( this ); + return v; + } +} -- GitLab