Statistics
| Revision:

gvsig-raster / org.gvsig.raster / branches / org.gvsig.raster.2.4 / org.gvsig.raster / org.gvsig.raster.lib / org.gvsig.raster.lib.buffer / org.gvsig.raster.lib.buffer.impl / src / main / java / org / gvsig / raster / lib / buffer / impl / PaginatedBandInt.java @ 8800

History | View | Annotate | Download (3.04 KB)

1 5522 fdiaz
package org.gvsig.raster.lib.buffer.impl;
2
3
import java.nio.IntBuffer;
4
import java.util.Arrays;
5
6 6487 fdiaz
import org.slf4j.Logger;
7
import org.slf4j.LoggerFactory;
8
9 5522 fdiaz
import org.gvsig.raster.lib.buffer.api.Band.BandInt;
10 5535 fdiaz
import org.gvsig.raster.lib.buffer.api.BandNotification;
11 5522 fdiaz
import org.gvsig.raster.lib.buffer.api.BandPageManager;
12
import org.gvsig.raster.lib.buffer.api.BufferManager;
13
import org.gvsig.raster.lib.buffer.api.NoData;
14
15
/**
16
 * @author fdiaz
17
 *
18
 */
19
public class PaginatedBandInt extends AbstractPaginatedBand implements BandInt {
20
21 6487 fdiaz
    private static final Logger logger =
22
        LoggerFactory.getLogger(PaginatedBandInt.class);
23
24 5522 fdiaz
    /**
25
     * @param rows
26
     * @param columns
27
     * @param noData
28
     * @param rowsPerPage
29
     * @param pageManager
30
     */
31
    public PaginatedBandInt(int rows, int columns, NoData noData, BandPageManager pageManager) {
32
        super(rows, columns, noData, pageManager);
33
    }
34
35
    @Override
36
    public int getDataType() {
37
        return BufferManager.TYPE_INT;
38
    }
39
40
    protected int getDataSize() {
41
        return 4;
42
    }
43
44
    @Override
45
    public Object get(int row, int column) {
46
        return getValue(row, column);
47
    }
48
49
    @Override
50 5535 fdiaz
    protected void doSet(int row, int column, Object value) {
51 5522 fdiaz
        setValue(row, column, (int) value);
52
    }
53
54
    @Override
55 5535 fdiaz
    protected void doFill(Object value) {
56 5522 fdiaz
        value = nullValueToNoData(value);
57
        if(value == null){
58
            value = 0;
59
        }
60
61
        for(int row=0; row<this.rows; row+=this.rowsPerPage){
62
            loadPage(row);
63 6220 dmartinezizquierdo
            Arrays.fill((int[])data.array(), (int) value);
64 5522 fdiaz
        }
65
    }
66
67
    @Override
68
    public int getValue(int row, int column) {
69
        loadPage(row);
70 6220 dmartinezizquierdo
        return ((IntBuffer) data).get( ((row-firstRowOfPage)*this.columns) + column);
71 5522 fdiaz
    }
72
73
    @Override
74
    public void setValue(int row, int column, int value) {
75 5535 fdiaz
        doSetValue(row, column, value);
76
        notifyObservers(new DefaultBandNotification(BandNotification.SET, new Object[]{row, column, value}));
77
    }
78
79
    protected void doSetValue(int row, int column, int value) {
80 5522 fdiaz
        loadPage(row);
81 6220 dmartinezizquierdo
        ((IntBuffer) data).put(((row-firstRowOfPage)*this.columns) + column, value);
82 5522 fdiaz
    }
83
84
    @Override
85
    public int[] createRowBuffer() {
86
        return new int[getColumns()];
87
    }
88
89
    @Override
90
    public void fetchRow(int row, Object rowBuffer) {
91
        loadPage(row);
92 6220 dmartinezizquierdo
        int[] source;
93
        source = (int[]) data.array();
94 5522 fdiaz
        int[] target = (int[]) rowBuffer;
95
        System.arraycopy(source, (row-firstRowOfPage)*this.columns, target, 0, this.columns);
96
    }
97
98
    @Override
99 5535 fdiaz
    protected void doPutRow(int row, Object rowBuffer) {
100 5522 fdiaz
        loadPage(row);
101
        int[] source = (int[]) rowBuffer;
102 6220 dmartinezizquierdo
        int[] target;
103
        target = (int[]) data.array();
104
        System.arraycopy(source, 0, target,(row - firstRowOfPage) * this.columns, this.columns);
105 5522 fdiaz
    }
106 6220 dmartinezizquierdo
107 6503 fdiaz
    @Override
108
    protected void loadPage(int row) {
109
        if (data == null) {
110
            data = IntBuffer.allocate(calculateBufferSizeToAllocate(rows, columns));
111
        }
112
        super.loadPage(row);
113
    }
114
115 5522 fdiaz
}