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 / PaginatedBandFloat.java @ 43803

History | View | Annotate | Download (3.06 KB)

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

    
3
import java.nio.FloatBuffer;
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.BandFloat;
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 PaginatedBandFloat extends AbstractPaginatedBand implements BandFloat {
20

    
21
    private static final Logger logger =
22
        LoggerFactory.getLogger(PaginatedBandFloat.class);
23

    
24
    /**
25
     * @param rows
26
     * @param columns
27
     * @param noData
28
     * @param rowsPerPage
29
     * @param pageManager
30
     */
31
    public PaginatedBandFloat(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_FLOAT;
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
    protected void doSet(int row, int column, Object value) {
51
        setValue(row, column, (float) value);
52
    }
53

    
54
    @Override
55
    protected void doFill(Object value) {
56
        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
            Arrays.fill((float[])data.array(), (float) value);
64
        }
65
    }
66

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

    
73
    @Override
74
    public void setValue(int row, int column, float value) {
75
        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, float value) {
80
        loadPage(row);
81
        ((FloatBuffer) data).put(((row-firstRowOfPage)*this.columns) + column, value);
82
    }
83

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

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

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

    
105
    @Override
106
    protected void loadPage(int row) {
107
        if (data == null) {
108
            data = FloatBuffer.allocate(calculateBufferSizeToAllocate(rows, columns));
109
        }
110
        super.loadPage(row);
111
    }
112
}