#include <headers.hpp>
Открытые члены | |
segment_header_t (const page_index_calculator_t &calculator, const area_ordinal_t &area_ordinal, const segment_ordinal_t &ordinal) | |
Инициализирующий конструктор. | |
const area_ordinal_t & | area_ordinal () const |
Порядковый номер области этого сегмента. | |
const segment_ordinal_t & | segment_ordinal () const |
Порядковый номер этого сегмента. | |
chain_id_t | allocate_block () |
Выделить блок из сегмента. | |
void | deallocate_block (const chain_id_t &block_id) |
Сделать блок свободным. | |
chain_id_t | next (const chain_id_t &block_id) const |
Получить ссылку на следущий блок для указанного блока. | |
void | change_next (const chain_id_t &block_id, const chain_id_t &next) |
Установить ссылку на следующий блок для указанного блока. | |
void | ensure_allocated (const chain_id_t &block_id) const |
Проверяет, что блок помечен, как занятый. | |
void | init_new () |
Проинициализировать заголовок для нового сегмента. | |
oess_1::io::ibinstream_t & | read_from (oess_1::io::ibinstream_t &from, io_buffer_t &io_buffer) |
Прочитать значение заголовка из указанного потока. | |
oess_1::io::obinstream_t & | write_to (oess_1::io::obinstream_t &to, io_buffer_t &io_buffer) const |
Записать значение заголовка в указанный поток. | |
bool | is_changed () const |
Был ли объект модифицирован? | |
void | force_not_changed () |
Сбросить флаг модифицированности объекта. | |
bool | has_free_blocks () const |
Есть ли свободные блоки? | |
Закрытые типы | |
typedef std::pair< bool, chain_id_t > | block_info_t |
Тип описателя одного блока. | |
Закрытые члены | |
unsigned int | item_index (const chain_id_t &id) const |
Вычислить порядковый номер блока в векторе описателей. | |
Закрытые данные | |
page_index_calculator_t | m_calculator |
Параметры хранилища. | |
area_ordinal_t | m_area_ordinal |
Порядковый номер области этого сегмента. | |
segment_ordinal_t | m_segment_ordinal |
Порядковый номер сегмента в файле. | |
bool | m_is_changed |
true, если объект был модифицирован. | |
unsigned int | m_total_block_count |
Общее количество блоков в сегменте, включая неиспользуемые. | |
unsigned int | m_useful_block_count |
Количество блоков, которые могут быть использованы. | |
chain_id_t | m_first_chain_id |
Идентификатор первого блока данного сегмента. | |
chain_id_t | m_last_chain_id |
Идентификатор последнего блока этого сегмента. | |
chain_id_t | m_first_free_id |
Идентификатор первого свободного блока данного сегмента. | |
unsigned int | m_free_count |
Количество свободных блоков. | |
std::vector< block_info_t > | m_items |
Описатели блоков данного сегмента. | |
Классы | |
class | io_buffer_t |
Вспомогательный буфер для выполнения операций ввода-вывода. Подробнее... |
typedef std::pair< bool, chain_id_t > block_info_t [private] |
Тип описателя одного блока.
Полем first является признак занятости блока (true, если блок свободен).
Полем second является идентификатор следующего блока в цепочке.
segment_header_t | ( | const page_index_calculator_t & | calculator, | |
const area_ordinal_t & | area_ordinal, | |||
const segment_ordinal_t & | ordinal | |||
) |
Инициализирующий конструктор.
calculator | Параметры хранилища. |
area_ordinal | Порядковый номер области этого сегмента. |
ordinal | Порядковый номер этого сегмента. |
chain_id_t allocate_block | ( | ) |
Выделить блок из сегмента.
Устанавливатся признак модификации объекта.
void change_next | ( | const chain_id_t & | block_id, | |
const chain_id_t & | next | |||
) |
Установить ссылку на следующий блок для указанного блока.
Устанавливатся признак модификации объекта.
oess_1::logic_ex_t,если | block_id является свободным. |
block_id | Блок, для которого устанавливается значение ссылки. |
next | Следующий элемент цепочки. |
void deallocate_block | ( | const chain_id_t & | block_id | ) |
Сделать блок свободным.
Устанавливатся признак модификации объекта.
void ensure_allocated | ( | const chain_id_t & | block_id | ) | const |
Проверяет, что блок помечен, как занятый.
oess_1::logic_ex_t,если | block_id является свободным. |
block_id | Блок, для которого проверяется признак занятости. |
bool has_free_blocks | ( | ) | const |
Есть ли свободные блоки?
void init_new | ( | ) |
Проинициализировать заголовок для нового сегмента.
Устанавливатся признак модификации объекта.
chain_id_t next | ( | const chain_id_t & | block_id | ) | const |
Получить ссылку на следущий блок для указанного блока.
oess_1::logic_ex_t,если | block_id является свободным. |
oess_1::io::ibinstream_t & read_from | ( | oess_1::io::ibinstream_t & | from, | |
io_buffer_t & | io_buffer | |||
) |
Прочитать значение заголовка из указанного потока.
Признак модификации объекта сбрасывается.
oess_1::io::obinstream_t & write_to | ( | oess_1::io::obinstream_t & | to, | |
io_buffer_t & | io_buffer | |||
) | const |
Записать значение заголовка в указанный поток.
Признак модификации объекта не изменяется.
chain_id_t m_first_chain_id [private] |
Идентификатор первого блока данного сегмента.
Нужен для того, чтобы определить позицию описателя этого блока в m_items.
chain_id_t m_first_free_id [private] |
Идентификатор первого свободного блока данного сегмента.
Содержит корректное значение только, если есть свободные блоки.
std::vector< block_info_t > m_items [private] |
Описатели блоков данного сегмента.
Количество элементов должно быть m_useful_block_count.
unsigned int m_useful_block_count [private] |
Количество блоков, которые могут быть использованы.
Это количество блоков, которые не попадают на заголовок сегмента.