Statistics
| Revision:

gvsig-raster / org.gvsig.raster.cache / trunk / org.gvsig.raster.cache / org.gvsig.raster.cache.lib.impl / deprecated / buffer / impl / stripecache / Cache.java @ 1939

History | View | Annotate | Download (8.49 KB)

1
package org.gvsig.raster.cache.buffer.impl.stripecache;
2

    
3
import java.io.IOException;
4

    
5
import org.gvsig.raster.cache.buffer.impl.memory.RasterMemoryBuffer;
6

    
7

    
8
/**
9
 * This interface should be implemented by any class that represents a Cache
10
 * @author Nacho Brodin (nachobrodin@gmail.com)
11
 */
12
public interface Cache {
13
        /**
14
         * Get the width of the data source
15
         * @return int
16
         */
17
        public int getDataSourceWidth();
18

    
19
        /**
20
         * Get the height of the data source
21
         * @return int
22
         */
23
        public int getDataSourceHeight();
24
        
25
        /**
26
         * Gets the height of a cache page in lines
27
         * @return Number of lines
28
         */
29
        public int getHPag();
30
        
31
        /**
32
         * Gets the page of data which is being accessed 
33
         * @return accessed PageBuffer 
34
         */
35
        public RasterMemoryBuffer getAccessPage();
36
        
37
        /**
38
         * Gets the offset
39
         * @return
40
         */
41
        public int getOffset();
42
        
43
        /**
44
         * Clones this object
45
         * @return
46
         */
47
        public Object clone();
48
        
49
        /**
50
         * Obtiene la p?gina de datos de la posici?n pag
51
         * @param pag N?mero de p?gina de cach? a recuperar
52
         * @return PageBuffer correspondiente a la p?gina recuperada
53
         */
54
        public PageBuffer getPageBufferFromNumberCachePage(int pag);
55
        
56
        /**
57
         * Obtiene la p?gina de datos a partir del n?mero de p?gina de raster
58
         * @param pag N?mero de p?gina raster a recuperar
59
         * @return PageBuffer correspondiente a la p?gina recuperada o null si no est? en cach?
60
         */
61
        public PageBuffer getPageBufferFromNumberRasterPage(int pag);
62
        
63
        /**
64
         * Obtiene el n?mero de p?gina de cach? (en formato grupo/p?gina dentro del grupo) 
65
         * donde est? cargada la p?gina del raster que se ha pasado por par?metro.
66
         * @param pag P?gina del raster
67
         * @return N?mero de p?gina del raster
68
         */
69
        public int[] getNumberGroupFromNumberRasterPage(int pag);
70
        
71
        /**
72
         * Asigna el buffer de la p?gina accedida por referencia
73
         * @param pb
74
         */
75
        public void setAccessPage(PageBuffer pb, int pagNumber);
76
        
77
        /**
78
         * Actualiza los ?ltimos accesos del grupo pasado por par?metro. Se incrementar? 
79
         * uno en todas las p?ginas del conjunto a excepci?n de las que valen -1 ya que 
80
         * esto significa que no hay p?gina cargada en dicha posici?n.
81
         * @param group N?mero de grupo a actualizar sus accesos
82
         * @return La posici?n del elemento del grupo con valor m?ximo. Este elemento 
83
         * es el candidato para el reemplazo.
84
         */
85
        public int updateLastAccess(int group);
86
        
87
        /**
88
         * Asigna un cero en la posici?n del array que contiene la antig?edad de acceso dentro 
89
         * del grupo. Esta operaci?n se realiza cada vez que se accede a un dato del la p?gina 
90
         * cacheada y significa que es la p?gina m?s recientemente accedida.
91
         * @param group N?mero de grupo
92
         * @param posInGroup Posici?n de la p?gina dentro del grupo.
93
         */
94
        public void setZeroInLastAccess(int group, int posInGroup);
95
        
96
        /**
97
         * Pone como modificada una p?gina de cach?
98
         * @param nCachePag N?mero de p?gina de cach? (posici?n de esta)
99
         */
100
        public void setModify(int nCachePag);
101
        
102
        /**
103
         * Pone como modificada una p?gina de cach?
104
         * @param group Grupo en el que se encuentra la p?gina
105
         * @param posInGroup Posici?n dentro del grupo en el que est? la p?gina
106
         */
107
        public void setModify(int group, int posInGroup);
108
        
109
        /**
110
         * Obtiene el n?mero de grupos de cach?
111
         * @return N?mero de grupos
112
         */
113
        public int getNGroups();
114
        
115
        /**
116
         * Obtiene el n?mero total de p?ginas del raster
117
         * @return N?mero total de p?ginas
118
         */
119
        public int getNTotalPags();
120
        
121
        /**
122
         * Obtiene el n?mero de p?gina del raster cargada en una p?gina de cach? especificada
123
         * en el par?metro. 
124
         * @param nCachePage N?mero de p?gina de cach? de la que se quiere saber que p?gina del 
125
         * raster hay cargada.
126
         * @return N?mero de p?gina del raster
127
         */
128
        public int getRasterPageNumberInPosition(int nCachePage);
129
        
130
        /**
131
         * Obtiene el n?mero de p?gina del raster cargada en una p?gina de cach? especificada
132
         * en el par?metro. 
133
         * @param group Grupo en el que se encuentra la p?gina
134
         * @param posInGroup Posici?n dentro del grupo en el que est? la p?gina
135
         * @return N?mero de p?gina del raster
136
         */
137
        public int getRasterPageNumberInPosition(int group, int posInGroup);
138
        
139
        /**
140
         * Asigna el n?mero de p?gina del raster cargada en una p?gina de cach? especificada.
141
         * @param nCachePage N?mero de p?gina de cach? 
142
         * @param nRasterPage N?mero de p?gina de raster a asignar
143
         */
144
        public void setRasterPageNumberInPosition(int nCachePage, int nRasterPage);
145
        
146
        /**
147
         * Asigna el n?mero de p?gina del raster cargada en una p?gina de cach? especificada.
148
         * @param nCachePage N?mero de p?gina de cach? 
149
         * @param nRasterPage N?mero de p?gina de raster a asignar
150
         */
151
        public void setRasterPageNumberInPosition(int group, int posInGroup, int nRasterPage);
152
        
153
        /**
154
         * Marca una p?gina como cargada en cach?.
155
         * @param nPag N?mero de p?gina a marcar.
156
         */
157
        public void setPageAsLoadInCache(int nPag);
158
        
159
        /**
160
         * Desmarca una p?gina como cargada en cach?.
161
         * @param nPag N?mero de p?gina a desmarcar.
162
         */
163
        public void setPageAsNotLoadInCache(int nPag);
164
        
165
        /**
166
         * Consulta si una p?gina de cach? ha sido modificada desde que se carg? en cach? o no.
167
         * @param nCachePag N?mero de p?gina de cach? (posici?n de esta)
168
         * @return true si ha sido modificada y false si no lo ha sido.
169
         */
170
        public boolean isModified(int nCachePag);
171

    
172
        /**
173
         * Consulta si una p?gina de cach? ha sido modificada desde que se carg? en cach? o no.
174
         * @param group Grupo en el que se encuentra la p?gina
175
         * @param posInGroup Posici?n dentro del grupo en el que est? la p?gina
176
         * @return true si ha sido modificada y false si no lo ha sido.
177
         */
178
        public boolean isModified(int group, int posInGroup);
179
        
180
        /**
181
         * Pone como no modificada una p?gina de cach?
182
         * @param nCachePag N?mero de p?gina de cach? (posici?n de esta)
183
         */
184
        public void unsetModify(int nCachePag);
185
        
186
        /**
187
         * Pone como no modificada una p?gina de cach?
188
         * @param group Grupo en el que se encuentra la p?gina
189
         * @param posInGroup Posici?n dentro del grupo en el que est? la p?gina
190
         */
191
        public void unsetModify(int group, int posInGroup);
192
        
193
        /**
194
         * Salva una p?gina especificada en el par?metro nPag a disco. La
195
         * petici?n que ha de hacerse se calcula previamente con la estructura de la cach?.
196
         *   
197
         * @param group Grupo del que se salva la p?gina nPag
198
         * @param posInGroupPageToReplace Posici?n dentro del grupo del que se salva la p?gina
199
         * @param nPag P?gina a salvar
200
         * @throws IOException
201
         */
202
        public void savePage(int group, int posInGroupPageToReplace, int nPag) throws IOException;
203
        
204
        /**
205
         * Carga una p?gina especificada en el par?metro nPag con los datos necesarios. La
206
         * petici?n que ha de hacerse se calcula previamente con la estructura de la cach?.
207
         *   
208
         * @param group Grupo sobre el que se carga la p?gina nPag
209
         * @param posInGroupPageToReplace Posici?n dentro del grupo sobre el que se carga la p?gina
210
         * @param nPag P?gina a cargar
211
         * @throws InterruptedException 
212
         */
213
        public void loadPage(int group, int posInGroupPageToReplace, int nPag) throws InterruptedException;
214
        
215
        /**
216
         * Obtiene la p?gina de datos del grupo definido en el par?metro group y de la 
217
         * posici?n pag dentro de ese grupo.
218
         * @param group Grupo de la p?gina requerida
219
         * @param pag N?mero de p?gina dentro del grupo
220
         * @return PageBuffer correspondiente a la p?gina recuperada
221
         */
222
        public PageBuffer getPageBuffer(int group, int posInGroup);
223
        
224
        /**
225
         * Obtiene el array que contiene los valores de la antig?edad del acceso dentro del
226
         * grupo. La primera dimensi?n del array corresponde al n?mero de grupo y la segunda
227
         * a los elementos del grupo. El elemento del grupo con un acceso m?s reciente tendr? 
228
         * un n?mero menor y el de mayor valor ser? el candidato para la sustituci?n en el pr?ximo
229
         * remplazamiento.
230
         * @return Array bidimensional con los valores de antig?edad.
231
         */
232
        public int[][] getLastAccess();
233
        
234
        /**
235
         * Obtiene el n?mero de p?ginas que tiene cada grupo
236
         * @return Entero con el n?mero de p?ginas por grupo 
237
         */
238
        public int getPagsPerGroup();
239
        
240
        /**
241
         * Obtiene el n?mero de bits por p?gina para poder calcular el desplazamiento binario
242
         * de la direcci?n de acceso de la petici?n. Es decir si se solicita un dato en la l?nea
243
         * 36 (en decimal) del raster 100100(en binario) y el desplazamiento es 4 bits el n?mero de 
244
         * p?gina resultante ser? 10(en binario) 2 (en decimal)
245
         * @return
246
         */
247
        public int getBitsPag();
248
        
249
        /**
250
         * Array de booleanos donde cada elemento es una p?gina del raster y dice si la p?gina 
251
         * est? cacheada o no.
252
         * @return true si la p?gina est? en cach? y false si no lo est?
253
         */
254
        public boolean isInCache(int nPag);
255
        
256
        /**
257
         * Obtiene el n?mero de p?gina cargada en el buffer
258
         * @return Entero con el n?mero de p?gina
259
         */
260
        public int getNumberInAccessPage();
261

    
262
}