UniSet
1.4.0
|
Открытые члены | |
TableBlockStorage () | |
TableBlockStorage (const char *name, int byte_sz, int key_sz, int inf_sz, int inf_count, int block_num, int block_lim, int seek, bool create=false) | |
bool | open (const char *name, int byte_sz, int inf_sz, int key_sz, int inf_count, int block_num, int block_lim, int seek) |
bool | create (const char *name, int byte_sz, int inf_sz, int key_sz, int inf_count, int block_num, int block_lim, int seek) |
bool | addRow (void *key, void *val) |
bool | delRow (void *key) |
void * | findKeyValue (void *key, void *val) |
int | getCurBlock (void) |
int | getByteSize () |
bool | checkAttr (int key_sz, int inf_sz, int sz, int block_num, int block_lim, int seek) |
Защищенные данные | |
FILE * | file |
int | inf_size |
Конструктор по умолчанию не открывает и не создает новой таблицы
Функции класса TableBlockStorage, таблицы ключ-значение с ограниченным кол-вом перезаписей для каждого блока памяти, при достижении предела, происходит переход в следующий блок
TableBlockStorage::TableBlockStorage | ( | const char * | name, |
int | byte_sz, | ||
int | key_sz, | ||
int | inf_sz, | ||
int | inf_count, | ||
int | block_num, | ||
int | block_lim, | ||
int | seek, | ||
bool | create = false |
||
) |
bool TableBlockStorage::addRow | ( | void * | key, |
void * | val | ||
) |
Добавление информации по ключу, возможна перезапись при совпадении ключа с существующим
если нашли совпадение ключа, то pos>=0, записываем на это место, иначе пишем на пустое место empty
Возвращаем false, если место в блоке закончилось
bool TableBlockStorage::checkAttr | ( | int | key_sz, |
int | inf_sz, | ||
int | inf_count, | ||
int | block_num, | ||
int | block_lim, | ||
int | seek | ||
) |
Использовать для проверки совпадения заголовков
Чтение заголовка таблицы
Проверяем заголовок на совпадение с нашими значениями
Используется в open().
bool TableBlockStorage::create | ( | const char * | name, |
int | byte_sz, | ||
int | inf_sz, | ||
int | key_sz, | ||
int | inf_count, | ||
int | block_num, | ||
int | block_lim, | ||
int | seek | ||
) |
Инициализация памяти
Запись заголовка таблицы
Поле счетчика записей при создании служит флагом на используемость блока и на пустоту ячейки записи: EMPTY_BLOCK=(-5) - заполняются первые элементы каждого блока, если там другое значение, то этот блок используется, EMPTY_ELEM=(-1) - все остальные пустые записи
Цикл инициализирует все блоки в файле
Перекрестные ссылки EMPTY_BLOCK.
Используется в TableBlockStorage().
bool TableBlockStorage::delRow | ( | void * | key | ) |
Удаление информации по ключу, фактически освобождения места не происходит, оно только помечается удаленным
При удалении счетчик перезаписей также увеличивается
void * TableBlockStorage::findKeyValue | ( | void * | key, |
void * | val | ||
) |
Поиск информации по ключу, при неудаче возвращается 0
TODO: можно убрать из параметров val, просто возвращать значение
Сравниваем ключи только если счетчик >= 0, т.е. запись существует
int TableBlockStorage::getCurBlock | ( | void | ) |
Получение текущего блока (для тестовой программы)
bool TableBlockStorage::open | ( | const char * | name, |
int | byte_sz, | ||
int | inf_sz, | ||
int | key_sz, | ||
int | inf_count, | ||
int | block_num, | ||
int | block_lim, | ||
int | seek | ||
) |
inf_sz | - размер поля информации, |
key_sz | - размер поля ключа, |
inf_count | - кол-во записей в одном блоке таблицы (размером inf_sz+key_sz +sizeof(int) на ключевое поле) |
block_num | - кол-во блоков (при этом кол-во записей во всей таблице = inf_count*block_num, |
block_lim | - число перезаписей на блок, |
seek | - отступ от начала файла (указывает место, где расположена таблица) |
размер всей таблицы будет равен inf_count*block_num*(inf_sz+key_sz+sizeof(int)) + sizeof(StorageAttr), где последнее слагаемое - размер заголовка, размер можно получить, вызвав функцию getByteSize()
Если уже был открыт файл в переменной данного класса, он закрывается и открывается новый
Инициализация памяти
Поиск непустого блока, либо если все пустые, текущий устанавливается 0
Чтение в память из нужного блока
Перекрестные ссылки checkAttr().
Используется в TableBlockStorage().