@Override public CellRandomAccess< T, C > randomAccess() { return new CellRandomAccess<>( this ); }
@Override public CellRandomAccess< T, C > copyRandomAccess() { return copy(); }
@Override public void setPosition( final int[] pos ) { for ( int d = 0; d < n; ++d ) { if ( pos[ d ] != position[ d ] ) { index += ( int ) ( pos[ d ] - position[ d ] ) * currentCellSteps[ d ]; if ( pos[ d ] < currentCellMin[ d ] || pos[ d ] > currentCellMax[ d ] ) { setPos2( pos, d ); break; } position[ d ] = pos[ d ]; } } type.updateIndex( index ); }
private void setPos2( final int[] pos, final int d0 ) { boolean movedOutOfBounds = false; for ( int d = d0; d < n; ++d ) { if ( pos[ d ] != position[ d ] ) { position[ d ] = pos[ d ]; if ( pos[ d ] < currentCellMin[ d ] || pos[ d ] > currentCellMax[ d ] ) { randomAccessOnCells.setPosition( pos[ d ] / cellDims[ d ], d ); movedOutOfBounds |= pos[ d ] < 0 || pos[ d ] >= dimensions[ d ]; } } } updatePosition( movedOutOfBounds ); }
protected CellRandomAccess( final CellRandomAccess< T, C > randomAccess ) { super( randomAccess.numDimensions() ); type = randomAccess.type.duplicateTypeOnSameNativeImg(); grid = randomAccess.grid; randomAccessOnCells = randomAccess.randomAccessOnCells.copyRandomAccess(); randomAccess.localize( position ); cellDims = randomAccess.cellDims; dimensions = randomAccess.dimensions; currentCellSteps = randomAccess.currentCellSteps; currentCellMin = randomAccess.currentCellMin; currentCellMax = randomAccess.currentCellMax; isOutOfBounds = randomAccess.isOutOfBounds; oobCellMin = randomAccess.oobCellMin; oobCellMax = randomAccess.oobCellMax; index = randomAccess.index; type.updateContainer( this ); type.updateIndex( index ); }
final C cell = getCell();
private void setPos2( final int[] pos, final int d0 ) { boolean movedOutOfBounds = false; for ( int d = d0; d < n; ++d ) { if ( pos[ d ] != position[ d ] ) { position[ d ] = pos[ d ]; if ( pos[ d ] < currentCellMin[ d ] || pos[ d ] > currentCellMax[ d ] ) { randomAccessOnCells.setPosition( pos[ d ] / cellDims[ d ], d ); movedOutOfBounds |= pos[ d ] < 0 || pos[ d ] >= dimensions[ d ]; } } } updatePosition( movedOutOfBounds ); }
protected CellRandomAccess( final CellRandomAccess< T, C > randomAccess ) { super( randomAccess.numDimensions() ); type = randomAccess.type.duplicateTypeOnSameNativeImg(); grid = randomAccess.grid; randomAccessOnCells = randomAccess.randomAccessOnCells.copyRandomAccess(); randomAccess.localize( position ); cellDims = randomAccess.cellDims; dimensions = randomAccess.dimensions; currentCellSteps = randomAccess.currentCellSteps; currentCellMin = randomAccess.currentCellMin; currentCellMax = randomAccess.currentCellMax; isOutOfBounds = randomAccess.isOutOfBounds; oobCellMin = randomAccess.oobCellMin; oobCellMax = randomAccess.oobCellMax; index = randomAccess.index; type.updateContainer( this ); type.updateIndex( index ); }
final C cell = getCell();
@Override public void fwd( final int d ) { index += currentCellSteps[ d ]; if ( ++position[ d ] > currentCellMax[ d ] ) { randomAccessOnCells.fwd( d ); updatePosition( position[ d ] >= dimensions[ d ] ); } type.updateIndex( index ); }
@Override public CellRandomAccess< T, C > copy() { return new CellRandomAccess<>( this ); }
@Override public CellRandomAccess< T, C > copyRandomAccess() { return copy(); }
@Override public void setPosition( final int[] pos ) { for ( int d = 0; d < n; ++d ) { if ( pos[ d ] != position[ d ] ) { index += ( int ) ( pos[ d ] - position[ d ] ) * currentCellSteps[ d ]; if ( pos[ d ] < currentCellMin[ d ] || pos[ d ] > currentCellMax[ d ] ) { setPos2( pos, d ); break; } position[ d ] = pos[ d ]; } } type.updateIndex( index ); }
@Override public void move( final long distance, final int d ) { index += ( int ) distance * currentCellSteps[ d ]; position[ d ] += distance; if ( position[ d ] < currentCellMin[ d ] || position[ d ] > currentCellMax[ d ] ) { randomAccessOnCells.setPosition( position[ d ] / cellDims[ d ], d ); updatePosition( position[ d ] < 0 || position[ d ] >= dimensions[ d ] ); } type.updateIndex( index ); }
@Override public CellRandomAccess< T, C > randomAccess() { return new CellRandomAccess<>( this ); }
@Override public void move( final long distance, final int d ) { index += ( int ) distance * currentCellSteps[ d ]; position[ d ] += distance; if ( position[ d ] < currentCellMin[ d ] || position[ d ] > currentCellMax[ d ] ) { randomAccessOnCells.setPosition( position[ d ] / cellDims[ d ], d ); updatePosition( position[ d ] < 0 || position[ d ] >= dimensions[ d ] ); } type.updateIndex( index ); }
@Override public CellRandomAccess< T, C > copy() { return new CellRandomAccess<>( this ); }
@Override public void move( final int distance, final int d ) { index += distance * currentCellSteps[ d ]; position[ d ] += distance; if ( position[ d ] < currentCellMin[ d ] || position[ d ] > currentCellMax[ d ] ) { randomAccessOnCells.setPosition( position[ d ] / cellDims[ d ], d ); updatePosition( position[ d ] < 0 || position[ d ] >= dimensions[ d ] ); } type.updateIndex( index ); }
@Override public void bck( final int d ) { index -= currentCellSteps[ d ]; if ( --position[ d ] < currentCellMin[ d ] ) { randomAccessOnCells.bck( d ); updatePosition( position[ d ] < 0 ); } type.updateIndex( index ); }
@Override public void setPosition( final long pos, final int d ) { index += ( int ) ( pos - position[ d ] ) * currentCellSteps[ d ]; position[ d ] = pos; if ( pos < currentCellMin[ d ] || pos > currentCellMax[ d ] ) { randomAccessOnCells.setPosition( pos / cellDims[ d ], d ); updatePosition( position[ d ] < 0 || position[ d ] >= dimensions[ d ] ); } type.updateIndex( index ); }