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 / PaginatedBandByte.java @ 6503

History | View | Annotate | Download (3 KB)

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

    
3
import java.nio.ByteBuffer;
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.BandByte;
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 PaginatedBandByte extends AbstractPaginatedBand implements BandByte {
20

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

    
24
    /**
25
     * @param rows
26
     * @param columns
27
     * @param noData
28
     * @param pageManager
29
     */
30
    public PaginatedBandByte(int rows, int columns, NoData noData, BandPageManager pageManager) {
31
        super(rows, columns, noData, pageManager);
32
    }
33

    
34
    @Override
35
    public int getDataType() {
36
        return BufferManager.TYPE_BYTE;
37
    }
38

    
39
    protected int getDataSize() {
40
        return 1;
41
    }
42

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

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

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

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

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

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

    
78
    protected void doSetValue(int row, int column, byte value) {
79
        loadPage(row);
80
        ((ByteBuffer) data).put(((row-firstRowOfPage)*this.columns) + column, value);
81
    }
82

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

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

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

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

    
112
}