Класс segment_header_t

#include <headers.hpp>

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


Подробное описание

Заголовок логического сегмента.

Начиная с:
v.1.4.0
Для объекта поддерживается понятие "модифицированности". Объект считается модифицированным, если для него были вызваны методы: init_new(), remove_free_segment(), return_free_segment(). Сделано это для того, чтобы просле проведения операций над заголовком можно было определить, следует ли записывать новое значение заголовка в файл.


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

 segment_header_t (const page_index_calculator_t &calculator, const area_ordinal_t &area_ordinal, const segment_ordinal_t &ordinal)
 Инициализирующий конструктор.
const area_ordinal_tarea_ordinal () const
 Порядковый номер области этого сегмента.
const segment_ordinal_tsegment_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_tread_from (oess_1::io::ibinstream_t &from, io_buffer_t &io_buffer)
 Прочитать значение заголовка из указанного потока.
oess_1::io::obinstream_twrite_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_tblock_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_tm_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

Проверяет, что блок помечен, как занятый.

Начиная с:
v.1.4.b2-2
Исключения:
oess_1::logic_ex_t,если block_id является свободным.
Аргументы:
block_id  Блок, для которого проверяется признак занятости.

bool has_free_blocks (  )  const

Есть ли свободные блоки?

Возвращает:
true, если есть.

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]

Количество блоков, которые могут быть использованы.

Это количество блоков, которые не попадают на заголовок сегмента.


Объявления и описания членов классов находятся в файлах:
Документация по ObjESSty. Последние изменения: Fri Oct 13 18:35:38 2006. Создано системой  doxygen 1.4.7
Hosted by uCoz