UniSet  1.4.0
Классы | Открытые типы | Открытые члены | Защищенные данные
Класс CycleStorage

Полный список членов класса

Классы

class  CycleStorageIterator

Открытые типы

typedef CycleStorageIterator iterator

Открытые члены

 CycleStorage ()
 CycleStorage (const char *name, int byte_sz, int inf_sz, int inf_count, int seek, bool create=false)
bool open (const char *name, int byte_sz, int inf_sz, int inf_count, int seek)
bool create (const char *name, int byte_sz, int inf_sz, int inf_count, int seek)
bool isOpen ()
bool addRow (void *str)
bool delRow (int row)
bool delAllRows (void)
void * readRow (int num, void *str)
int getIter (void)
bool setSize (int count)
int getByteSize ()
int getSize ()
int getInfSize ()
int getFullSize ()
bool checkAttr (int inf_sz, int inf_count, int seek)
int getHead ()
int getTail ()
iterator begin ()
iterator end ()

Защищенные данные

FILE * file
int inf_size
int head
int tail

Конструктор(ы)

Конструктор по умолчанию не открывает и не создает нового журнала

Функции класса CycleStorage, циклически переписываемого журнала, перезаписываются самые старые элемениты при полном заполнении журнала

CycleStorage::CycleStorage ( const char *  name,
int  byte_sz,
int  inf_sz,
int  inf_count,
int  seek,
bool  create = false 
)

Конструктор вызывает функцию Open, а при параметре create=true создает новый журнал при несовпадении заголовков или отсутствии старого

Перекрестные ссылки create() и open().


Методы

bool CycleStorage::addRow ( void *  str)

Добавление информации в конец журнала

Первые 2 случая - список пуст (head=-1), в списке 1 элемент(head=tail=0) рассматриваю отдельно)

Статус элемента совпадает со статусом последнего элемента в журнале 2, 3 -> 2; 4, 5 -> 4

Если последний элемент журнала в крайней правой позиции выделенной части файла, переходим в начало части файла и инвертируем статус 2->4, 4->2

Переписываем головной элемент новым, а второй от начала делаем головным, т. е. сдвигаем голову на 1 элемент вперед

bool CycleStorage::checkAttr ( int  inf_sz,
int  inf_count,
int  seek 
)

Использовать для проверки совпадения заголовков

Читаем заголовок

Проверяем заголовок на совпадение с нашими значениями

Используется в open().

bool CycleStorage::create ( const char *  name,
int  byte_sz,
int  inf_sz,
int  inf_count,
int  seek 
)

Создаем файл, если его нет

Записываем заголовок журнала

Создаем журнал нужного размера

Используется в CycleStorage().

bool CycleStorage::delAllRows ( void  )

Очистка журнала

Переписываем статусы всех элементов нулями

bool CycleStorage::delRow ( int  row)

Удаление информации с номером ряда row

При удалении меняем стутус 1->6, 2->3, 4->5 или возвращаем false

int CycleStorage::getIter ( void  )

Получение кол-ва итерации при поиске начала/конца журнала (для тестовой программы)

bool CycleStorage::open ( const char *  name,
int  byte_sz,
int  inf_sz,
int  inf_count,
int  seek 
)
Аргументы:
inf_sz- размер поля информации,
inf_count- количество записей (размером inf_sz +1 на ключевое поле)
seek- отступ от начала файла (указывает место, где расположен журнал)

размер всего журнала будет равен inf_count*(inf_sz+1) + sizeof(CycleStorageAttr), где последнее слагаемое - размер заголовка размер можно получить, вызвав функцию getByteSize()

Если уже был открыт файл в переменной данного класса, он закрывается и открывается новый

Перекрестные ссылки checkAttr().

Используется в CycleStorage().

void * CycleStorage::readRow ( int  num,
void *  str 
)
Возвращает:
Функция возвращает информацию из ряда с номером num

TODO: можно убрать из параметров str, просто возвращать значение

Отсчитываем номер элемента от головы журнала

Используется в CycleStorage::CycleStorageIterator::operator++().

bool CycleStorage::setSize ( int  count)

Изменение размера журнала (количества записей в нем)

Функция для изменения размера журнала. Удаляет все записи, если новый размер меньше. Заполняет новое место записями, аналогичными удаленным, если новый размер больше. Вызывать лучше не часто, т. к. переписывается заголовок журнала, расположенный статически в одном месте

Записываем заголовок журнала


Объявления и описания членов классов находятся в файлах: