Statistics
| Revision:

svn-gvsig-desktop / branches / org.gvsig.desktop-2018a / org.gvsig.desktop.library / org.gvsig.raster / org.gvsig.raster.lib / org.gvsig.raster.lib.buffer.impl / src / main / java / org / gvsig / raster / lib / buffer / impl / TiledBandShort.java @ 43803

History | View | Annotate | Download (3.2 KB)

1
package org.gvsig.raster.lib.buffer.impl;
2

    
3
import java.nio.ShortBuffer;
4
import java.util.Arrays;
5

    
6
import org.gvsig.raster.lib.buffer.api.Band.BandShort;
7
import org.gvsig.raster.lib.buffer.api.BandNotification;
8
import org.gvsig.raster.lib.buffer.api.BandTileManager;
9
import org.gvsig.raster.lib.buffer.api.BufferManager;
10
import org.gvsig.raster.lib.buffer.api.NoData;
11

    
12
/**
13
 * Tile band short
14
 * @author dmartinezizquierdo
15
 *
16
 */
17
public class TiledBandShort extends AbstractTiledBand implements BandShort {
18

    
19
    /**
20
     * Default Constructor
21
     * @param rows
22
     * @param columns
23
     * @param noData
24
     * @param tileManager
25
     */
26
    public TiledBandShort(int rows, int columns, NoData noData, BandTileManager tileManager) {
27
        super(rows, columns, noData, tileManager);
28
        data = ShortBuffer.allocate(calculateBufferSizeToAllocate(rows, columns));
29

    
30
    }
31

    
32
    @Override
33
    public int getDataType() {
34
        return BufferManager.TYPE_SHORT;
35
    }
36

    
37
    protected int getDataSize() {
38
        return 2;
39
    }
40

    
41
    @Override
42
    public Object get(int row, int column) {
43
        return getValue(row, column);
44
    }
45

    
46
    @Override
47
    protected void doSet(int row, int column, Object value) {
48
        setValue(row, column, (short) value);
49
    }
50

    
51
    @Override
52
    protected void doFill(Object value) {
53
        value = nullValueToNoData(value);
54
        if(value == null){
55
            value = 0;
56
        }
57
        for(int row=0; row<this.rows; row+=this.rowsInTile){
58
            for(int column=0; column<this.columns; column+=this.columnsInTile){
59
                loadTile(row,column);
60
                Arrays.fill((short[])data.array(), (short)value);
61
            }
62
        }
63
    }
64

    
65
    @Override
66
    public short getValue(int row, int column) {
67
        loadTile(row, column);
68
        return ((ShortBuffer) data).get( ((row-firstRowOfTile)*this.columnsInTile) + (column-firstColumnOfTile));
69
    }
70

    
71
    @Override
72
    public void setValue(int row, int column, short value) {
73
        doSetValue(row, column, value);
74
        notifyObservers(new DefaultBandNotification(BandNotification.SET, new Object[]{row, column, value}));
75
    }
76

    
77
    protected void doSetValue(int row, int column, short value) {
78
        loadTile(row,column);
79
        ((ShortBuffer) data).put(((row-firstRowOfTile)*this.columnsInTile) + (column-firstColumnOfTile), value);
80
    }
81

    
82
    @Override
83
    public short[] createRowBuffer() {
84
        return new short[getColumns()];
85
    }
86

    
87
    @Override
88
    public void fetchRow(int row, Object rowBuffer) {
89
        short[] target = (short[]) rowBuffer;
90
        for(int column=0; column<this.columns; column+=this.columnsInTile){
91
            loadTile(row,column);
92
            short[] source = (short[]) data.array();
93
            System.arraycopy(source, (row-firstRowOfTile)*this.columnsInTile, target, column, this.columnsInTile);
94
        }
95
    }
96

    
97
    @Override
98
    protected void doPutRow(int row, Object rowBuffer) {
99
        short[] source = (short[]) rowBuffer;
100
        for(int column=0; column<this.columns; column+=this.columnsInTile){
101
            loadTile(row,column);
102
            short[] target = (short[]) data.array();
103
            System.arraycopy(source, column, target, (row-firstRowOfTile)*this.columnsInTile, this.columnsInTile);
104
        }
105
    }
106

    
107
}