Class PageDataImpl

java.lang.Object
xyz.cofe.cbuffer.page.PageDataAbstract
xyz.cofe.cbuffer.page.PageDataImpl
All Implemented Interfaces:
FastDataSize, GetPageSize, PageBuffers, PageBuffersProperties, PageData, PageFastDirty, PageFastRead, PageFastWrite, PageLoad, PageMap, PageSizeProperty, PageSlowRead, PageSlowWrite

public class PageDataImpl
extends PageDataAbstract
implements PageData, PageSlowWrite
Базовая реализация страничной организации данных с кэшем
  • Field Summary

    Fields 
    Modifier and Type Field Description
    java.util.Map<java.lang.Integer,​java.lang.Boolean> dirtyFastPages  
    protected java.util.Map<java.lang.Integer,​java.lang.Integer> fast2slow
    Таблица соответствия кэш страниц и страниц на диске
    т.е. отображение fast → на → slow
    protected xyz.cofe.collection.IndexSet<java.lang.Integer> freepages
    Список свободных кэш страниц
    PageEvent<java.lang.Integer> onAlloc
    Событие выделения страницы.
    PageEvent<java.lang.Integer> onAllocExistsPage
    Событие выделения страницы из списка используемых страниц, с предварительным сохранением данных
    PageEvent<java.lang.Integer> onAllocFreePage
    Событие выделения страницы из списка свободных (ранее занятых) freepages
    PageEvent<java.lang.Integer> onAllocNewPage
    Событие выделения страницы из неразмеченной области (не распределенных)
    PageEvent<PageDataReaded> onDataRead
    Событие чтения данных из страницы
    PageEvent<PageDataWrited> onDataWrited
    Событие записи данных в страницу
    PageEvent<xyz.cofe.fn.Pair<java.lang.Integer,​java.lang.Boolean>> onDirty  
    PageEvent<xyz.cofe.fn.Pair<java.lang.Integer,​java.lang.Integer>> onFastDataSize
    Событие установки размера кэш страницы.
    PageEvent<xyz.cofe.fn.Pair<java.lang.Integer,​byte[]>> onFastDataWrited
    Событие записи в страницу кэша.
    PageEvent<PageMapEntry> onMapped
    Событие сопоставления между кэш страницей и данными
    PageEvent<java.lang.Integer> onSavedFastPage
    Событие сохранения кэш страницы
    PageEvent<PageMapEntry> onUnmapped
    Событие удаления связи между кэш страницей и данными
    protected java.util.Map<java.lang.Integer,​java.lang.Integer> slow2fast
    Таблица соответствия страниц на диске и кэш страниц
    т.е. отображение slow → на → fast
    protected xyz.cofe.collection.IndexSet<java.lang.Integer> usedpages
    Список занятых кэш страниц
  • Constructor Summary

    Constructors 
    Constructor Description
    PageDataImpl()  
  • Method Summary

    Modifier and Type Method Description
    protected int allocatePage()
    Выделение кэш страницы.
    byte[] data​(int page)
    Читает данные страницы
    void data​(int page, byte[] bytes)
    Записывает данные в страницу
    boolean dirty​(int fastPageIndex)
    Проверка, что указанная fast станица содержит не сохранненые изменения
    void dirty​(int fastPageIndex, boolean dirty)
    Указыает, что fast станица содержит (не)сохранненые изменения
    void fastData​(int fastPageIndex, byte[] bytes)
    Запись данных в fast страницы (кэш) Запись страницы в fast.
    int fastDataSize​(int fastPageIndex)
    Получение кол-ва данных кэш страницы
    void fastDataSize​(int fastPageIndex, int dataSize)
    Установка размера кэш страницы
    int fastPageCount()
    Возвращает кол-во используемых кэш страниц
    int fastToSlow​(int fastPageIndex)
    Возвращает отображение страницы fast = на => slow
    int getDirtyPageCount()  
    xyz.cofe.collection.IndexSet<java.lang.Integer> getDirtyPages()  
    int getMaxFastPageCount()
    Указыает максимальное кол-во кэшируемых страниц
    int map​(int slowPageIndex)
    Загрузка страницы из данных (slow) в кэш (fast)
    void saveFastPage​(int fastPageIndex)
    Сохранение кэш страницы
    void setMaxFastPageCount​(int max)
    Указыает максимальное кол-во кэшируемых страниц
    int slowToFast​(int slowPageIndex)
    Возвращает отображение страницы slow = на => fast
    void unmap​(int fastPageIndex)
    Освобождение кэш страницы.

    Methods inherited from class xyz.cofe.cbuffer.page.PageDataAbstract

    getFastBuffer, getPageSize, getSlowBuffer, setFastBuffer, setPageSize, setSlowBuffer

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface xyz.cofe.cbuffer.page.PageFastRead

    fastData

    Methods inherited from interface xyz.cofe.cbuffer.page.PageSlowRead

    getMaxSlowPageIndex, slowData

    Methods inherited from interface xyz.cofe.cbuffer.page.PageSlowWrite

    slowData
  • Field Details

    • onFastDataWrited

      public final PageEvent<xyz.cofe.fn.Pair<java.lang.Integer,​byte[]>> onFastDataWrited
      Событие записи в страницу кэша. Нумерация страниц - относительно кэша
    • onFastDataSize

      public final PageEvent<xyz.cofe.fn.Pair<java.lang.Integer,​java.lang.Integer>> onFastDataSize
      Событие установки размера кэш страницы. Нумерация страниц - относительно кэша
    • dirtyFastPages

      public final java.util.Map<java.lang.Integer,​java.lang.Boolean> dirtyFastPages
    • onDirty

      public final PageEvent<xyz.cofe.fn.Pair<java.lang.Integer,​java.lang.Boolean>> onDirty
    • fast2slow

      protected final java.util.Map<java.lang.Integer,​java.lang.Integer> fast2slow
      Таблица соответствия кэш страниц и страниц на диске
      т.е. отображение fast → на → slow
    • slow2fast

      protected final java.util.Map<java.lang.Integer,​java.lang.Integer> slow2fast
      Таблица соответствия страниц на диске и кэш страниц
      т.е. отображение slow → на → fast
    • freepages

      protected final xyz.cofe.collection.IndexSet<java.lang.Integer> freepages
      Список свободных кэш страниц
    • usedpages

      protected final xyz.cofe.collection.IndexSet<java.lang.Integer> usedpages
      Список занятых кэш страниц
    • onAllocFreePage

      public final PageEvent<java.lang.Integer> onAllocFreePage
      Событие выделения страницы из списка свободных (ранее занятых) freepages
    • onAllocNewPage

      public final PageEvent<java.lang.Integer> onAllocNewPage
      Событие выделения страницы из неразмеченной области (не распределенных)
    • onAllocExistsPage

      public final PageEvent<java.lang.Integer> onAllocExistsPage
      Событие выделения страницы из списка используемых страниц, с предварительным сохранением данных
    • onAlloc

      public final PageEvent<java.lang.Integer> onAlloc
      Событие выделения страницы. Происходит при срабатвании любого из перечисленных: onAllocExistsPage, onAllocFreePage, onAllocNewPage
    • onUnmapped

      public final PageEvent<PageMapEntry> onUnmapped
      Событие удаления связи между кэш страницей и данными
    • onMapped

      public final PageEvent<PageMapEntry> onMapped
      Событие сопоставления между кэш страницей и данными
    • onSavedFastPage

      public final PageEvent<java.lang.Integer> onSavedFastPage
      Событие сохранения кэш страницы
    • onDataRead

      public final PageEvent<PageDataReaded> onDataRead
      Событие чтения данных из страницы
    • onDataWrited

      public final PageEvent<PageDataWrited> onDataWrited
      Событие записи данных в страницу
  • Constructor Details

  • Method Details

    • fastData

      public void fastData​(int fastPageIndex, byte[] bytes)
      Запись данных в fast страницы (кэш)
      • Запись страницы в fast.
      • Страница помечается как измененная dirty(int)
      Specified by:
      fastData in interface PageFastWrite
      Parameters:
      fastPageIndex - индекс кэш страницы
      bytes - данные
    • fastDataSize

      public void fastDataSize​(int fastPageIndex, int dataSize)
      Установка размера кэш страницы
      Specified by:
      fastDataSize in interface FastDataSize
      Parameters:
      fastPageIndex - индекс fast страницы
      dataSize - кол-во байт
    • fastDataSize

      public int fastDataSize​(int fastPageIndex)
      Получение кол-ва данных кэш страницы
      Specified by:
      fastDataSize in interface FastDataSize
      Parameters:
      fastPageIndex - индекс fast страницы
      Returns:
      кол-во данных на странице
    • dirty

      public boolean dirty​(int fastPageIndex)
      Description copied from interface: PageFastDirty
      Проверка, что указанная fast станица содержит не сохранненые изменения
      Specified by:
      dirty in interface PageFastDirty
      Parameters:
      fastPageIndex - fast страница
      Returns:
      true - есть изменения которые не зафиксированы
    • dirty

      public void dirty​(int fastPageIndex, boolean dirty)
      Description copied from interface: PageFastDirty
      Указыает, что fast станица содержит (не)сохранненые изменения
      Specified by:
      dirty in interface PageFastDirty
      Parameters:
      fastPageIndex - fast страница
      dirty - - есть изменения
    • getDirtyPageCount

      public int getDirtyPageCount()
    • getDirtyPages

      public xyz.cofe.collection.IndexSet<java.lang.Integer> getDirtyPages()
    • fastToSlow

      public int fastToSlow​(int fastPageIndex)
      Возвращает отображение страницы fast = на => slow
      Specified by:
      fastToSlow in interface PageMap
      Parameters:
      fastPageIndex - Индекс страницы в fast буфере
      Returns:
      индес страницы в slow соответ fast или -1, если нет соответствия
    • slowToFast

      public int slowToFast​(int slowPageIndex)
      Возвращает отображение страницы slow = на => fast
      Specified by:
      slowToFast in interface PageMap
      Parameters:
      slowPageIndex - Индекс страницы в slow буфере
      Returns:
      индес страницы в fast соответ slow или -1, если нет соответствия
    • fastPageCount

      public int fastPageCount()
      Возвращает кол-во используемых кэш страниц
      Specified by:
      fastPageCount in interface PageFastRead
      Returns:
      кол-во используемых кэш страниц
    • getMaxFastPageCount

      public int getMaxFastPageCount()
      Указыает максимальное кол-во кэшируемых страниц
      Returns:
      максимальное кол-во кеш страниц, по умолчанию 16
    • setMaxFastPageCount

      public void setMaxFastPageCount​(int max)
      Указыает максимальное кол-во кэшируемых страниц
      Parameters:
      max - максимальное кол-во кеш страниц, минимально допустимое - 1
    • allocatePage

      protected int allocatePage()
      Выделение кэш страницы.
      Нумерация страниц - относительно кэша
      Returns:
      индекс кэш страницы или -1, если не выделена страница - возможно при условии, что getMaxFastPageCount() вернет 0 или меньше
    • map

      public int map​(int slowPageIndex)
      Загрузка страницы из данных (slow) в кэш (fast)
      Specified by:
      map in interface PageLoad
      Parameters:
      slowPageIndex - страница
      Returns:
      индекс кэш страницы (fast)
    • unmap

      public void unmap​(int fastPageIndex)
      Освобождение кэш страницы.

      Если страница помечена как грязная (т.е. измененная dirty(int)), то она будет сохранена - saveFastPage(int).

      Parameters:
      fastPageIndex - иднекс кэш страницы
    • saveFastPage

      public void saveFastPage​(int fastPageIndex)
      Сохранение кэш страницы
      Parameters:
      fastPageIndex - индекс кэш страницы
    • data

      public byte[] data​(int page)
      Читает данные страницы
      Specified by:
      data in interface PageData
      Parameters:
      page - страница - сквозная нумерация
      Returns:
      данные
    • data

      public void data​(int page, byte[] bytes)
      Записывает данные в страницу
      Specified by:
      data in interface PageData
      Parameters:
      page - страница - сквозная нумерация
      bytes - данные