Skip to content

Commit bc73d61

Browse files
committed
Undo that last thing
Ctrl-Z
1 parent 1d24044 commit bc73d61

File tree

2 files changed

+168
-8
lines changed

2 files changed

+168
-8
lines changed

src/main/java/net/imglib2/RealRandomAccess.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
* @author Stephan Preibisch
4040
* @author Stephan Saalfeld
4141
*/
42-
public interface RealRandomAccess< T > extends RealLocalizable, RealPositionable, RandomAccess<T>
42+
public interface RealRandomAccess< T > extends RealLocalizable, RealPositionable, Sampler<T>
4343
{
4444
// NB: Ideally, we would utilize covariant inheritance to narrow the return
4545
// type of a single copy() method here, rather than needing separate methods
@@ -168,9 +168,4 @@ default T setPositionAndGet( final RealLocalizable position )
168168
return get();
169169
}
170170

171-
@Override
172-
default long getLongPosition(int d) {
173-
return (long) getDoublePosition(d);
174-
}
175-
176171
}

src/main/java/net/imglib2/RealRandomAccessible.java

Lines changed: 167 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,12 +148,12 @@ default RealRandomAccessibleView< T > realView()
148148

149149
@Override
150150
default RandomAccess< T > randomAccess() {
151-
return realRandomAccess();
151+
return new RandomAccessOnRealRandomAccessible<>(realRandomAccess());
152152
}
153153

154154
@Override
155155
default RandomAccess< T > randomAccess(final Interval interval) {
156-
return realRandomAccess(interval);
156+
return new RandomAccessOnRealRandomAccessible<>(realRandomAccess(interval));
157157
}
158158

159159
/*
@@ -167,3 +167,168 @@ default RandomAccess< T > randomAccess(final Interval interval) {
167167
// }
168168
}
169169

170+
/**
171+
* It's tempting to make {@link RealRandomAccess} extends {@link RandomAccess}.
172+
* However a {@link RealRandomAccess} is not {@link Localizable}, because its
173+
* position cannot always be reported in discrete space. This class wraps a
174+
* {@link RealRandomAccess} such that all calls are in discrete space
175+
*
176+
* @author Stephan Saalfeld
177+
* @author Gabriel Selzer
178+
*/
179+
final class RandomAccessOnRealRandomAccessible<T> implements RandomAccess< T >
180+
{
181+
private final RealRandomAccess< T > sourceAccess;
182+
183+
public RandomAccessOnRealRandomAccessible( final RealRandomAccess< T > sourceAccess )
184+
{
185+
this.sourceAccess = sourceAccess;
186+
}
187+
188+
@Override
189+
public void localize( final int[] position )
190+
{
191+
for ( int d = 0; d < sourceAccess.numDimensions(); ++d )
192+
position[ d ] = ( int ) Math.round( sourceAccess.getDoublePosition( d ) );
193+
}
194+
195+
@Override
196+
public void localize( final long[] position )
197+
{
198+
for ( int d = 0; d < sourceAccess.numDimensions(); ++d )
199+
position[ d ] = Math.round( sourceAccess.getDoublePosition( d ) );
200+
}
201+
202+
@Override
203+
public int getIntPosition( final int d )
204+
{
205+
return ( int ) Math.round( sourceAccess.getDoublePosition( d ) );
206+
}
207+
208+
@Override
209+
public long getLongPosition( final int d )
210+
{
211+
return Math.round( sourceAccess.getDoublePosition( d ) );
212+
}
213+
214+
@Override
215+
public void localize( final float[] position )
216+
{
217+
sourceAccess.localize( position );
218+
}
219+
220+
@Override
221+
public void localize( final double[] position )
222+
{
223+
sourceAccess.localize( position );
224+
}
225+
226+
@Override
227+
public float getFloatPosition( final int d )
228+
{
229+
return sourceAccess.getFloatPosition( d );
230+
}
231+
232+
@Override
233+
public double getDoublePosition( final int d )
234+
{
235+
return sourceAccess.getDoublePosition( d );
236+
}
237+
238+
@Override
239+
public void fwd( final int d )
240+
{
241+
sourceAccess.fwd( d );
242+
}
243+
244+
@Override
245+
public void bck( final int d )
246+
{
247+
sourceAccess.bck( d );
248+
}
249+
250+
@Override
251+
public void move( final int distance, final int d )
252+
{
253+
sourceAccess.move( distance, d );
254+
}
255+
256+
@Override
257+
public void move( final long distance, final int d )
258+
{
259+
sourceAccess.move( distance, d );
260+
}
261+
262+
@Override
263+
public void move( final Localizable localizable )
264+
{
265+
sourceAccess.move( localizable );
266+
}
267+
268+
@Override
269+
public void move( final int[] distance )
270+
{
271+
sourceAccess.move( distance );
272+
}
273+
274+
@Override
275+
public void move( final long[] distance )
276+
{
277+
sourceAccess.move( distance );
278+
}
279+
280+
@Override
281+
public void setPosition( final Localizable localizable )
282+
{
283+
sourceAccess.setPosition( localizable );
284+
}
285+
286+
@Override
287+
public void setPosition( final int[] position )
288+
{
289+
sourceAccess.setPosition( position );
290+
}
291+
292+
@Override
293+
public void setPosition( final long[] position )
294+
{
295+
sourceAccess.setPosition( position );
296+
}
297+
298+
@Override
299+
public void setPosition( final int position, final int d )
300+
{
301+
sourceAccess.setPosition( position, d );
302+
}
303+
304+
@Override
305+
public void setPosition( final long position, final int d )
306+
{
307+
sourceAccess.setPosition( position, d );
308+
}
309+
310+
@Override
311+
public T get()
312+
{
313+
return sourceAccess.get();
314+
}
315+
316+
@Override
317+
public T getType()
318+
{
319+
return sourceAccess.getType();
320+
}
321+
322+
@Override
323+
public RandomAccessOnRealRandomAccessible<T> copy()
324+
{
325+
return new RandomAccessOnRealRandomAccessible<>( sourceAccess.copy() );
326+
}
327+
328+
@Override
329+
public int numDimensions()
330+
{
331+
return sourceAccess.numDimensions();
332+
}
333+
}
334+

0 commit comments

Comments
 (0)