xyz.cofe.cbuffer.page.PageData Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of cbuffer Show documentation
Show all versions of cbuffer Show documentation
byte array manipulations, data paging
package xyz.cofe.cbuffer.page;
/**
* Читает данные указанной страницы, нумерация страниц как для кэша, так и для данных сквозная
*
*
* см функции:
*
* - {@link #slowToFast(int)} - получение отображения страницы на кэш
* - {@link #fastData(int)} - получение данных из кэша
* - {@link #map(int)} - загрузка данных из диска в кэш
* - {@link #getMaxSlowPageIndex()} - получение максимального номера страницы на диске
*
*/
public interface PageData extends PageMap, PageFastRead, PageFastWrite, PageSlowRead, PageLoad {
/**
* Читает данные страницы
* @param page страница - сквозная нумерация
* @return данные
*/
default byte[] data(int page){
if( page<0 ) throw new IllegalArgumentException("page<0");
int fastIdx = slowToFast(page);
if( fastIdx>=0 ){
return fastData(fastIdx);
}
int maxSlowPI = getMaxSlowPageIndex();
if( page>maxSlowPI )return new byte[0];
fastIdx = map(page);
if( fastIdx<0 )throw new IllegalStateException("can't load page="+page);
return fastData(fastIdx);
}
/**
* Записывает данные в страницу
* @param page страница - сквозная нумерация
* @param bytes данные
*/
default void data(int page, byte[] bytes){
if( page<0 ) throw new IllegalArgumentException("page<0");
if( bytes==null ) throw new IllegalArgumentException("bytes==null");
if( bytes.length==0 )return;
int fastIdx = slowToFast(page);
if( fastIdx>=0 ){
fastData(fastIdx,bytes);
return;
}
fastIdx = map(page);
if( fastIdx<0 )throw new IllegalStateException("can't load page="+page);
fastData(fastIdx,bytes);
}
}