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 @ 6487

History | View | Annotate | Download (2.91 KB)

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

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

    
6
import org.slf4j.Logger;
7
import org.slf4j.LoggerFactory;
8

    
9
import org.gvsig.raster.lib.buffer.api.Band.BandInt;
10
import org.gvsig.raster.lib.buffer.api.BandNotification;
11
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
    private static final Logger logger =
22
        LoggerFactory.getLogger(PaginatedBandInt.class);
23

    
24
    /**
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
        data = IntBuffer.allocate(calculateBufferSizeToAllocate(rows, columns));
34
    }
35

    
36
    @Override
37
    public int getDataType() {
38
        return BufferManager.TYPE_INT;
39
    }
40

    
41
    protected int getDataSize() {
42
        return 4;
43
    }
44

    
45
    @Override
46
    public Object get(int row, int column) {
47
        return getValue(row, column);
48
    }
49

    
50
    @Override
51
    protected void doSet(int row, int column, Object value) {
52
        setValue(row, column, (int) value);
53
    }
54

    
55
    @Override
56
    protected void doFill(Object value) {
57
        value = nullValueToNoData(value);
58
        if(value == null){
59
            value = 0;
60
        }
61

    
62
        for(int row=0; row<this.rows; row+=this.rowsPerPage){
63
            loadPage(row);
64
            Arrays.fill((int[])data.array(), (int) value);
65
        }
66
    }
67

    
68
    @Override
69
    public int getValue(int row, int column) {
70
        loadPage(row);
71
        return ((IntBuffer) data).get( ((row-firstRowOfPage)*this.columns) + column);
72
    }
73

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

    
80
    protected void doSetValue(int row, int column, int value) {
81
        loadPage(row);
82
        ((IntBuffer) data).put(((row-firstRowOfPage)*this.columns) + column, value);
83
    }
84

    
85
    @Override
86
    public int[] createRowBuffer() {
87
        return new int[getColumns()];
88
    }
89

    
90
    @Override
91
    public void fetchRow(int row, Object rowBuffer) {
92
        loadPage(row);
93
        int[] source;
94
        source = (int[]) data.array();
95
        int[] target = (int[]) rowBuffer;
96
        System.arraycopy(source, (row-firstRowOfPage)*this.columns, target, 0, this.columns);
97
    }
98

    
99
    @Override
100
    protected void doPutRow(int row, Object rowBuffer) {
101
        loadPage(row);
102
        int[] source = (int[]) rowBuffer;
103
        int[] target;
104
        target = (int[]) data.array();
105
        System.arraycopy(source, 0, target,(row - firstRowOfPage) * this.columns, this.columns);
106
    }
107

    
108
}