Класс chain_ostream_t

Граф наследования:chain_ostream_t:

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

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

Выходной поток, который скрывает в себе детали распределения образа транзакции по страницам trace-файла.

Начиная с:
v.1.4.0
Если при выталкивании образа требуется завершить текущий trace-файл и начать новый, то chain_ostream_t выполняет это автоматически. Номер созданного trace-файла помещается в переданное в конструкторе множество номеров trace-файлов. В результате, после завершения работы объекта этого класса получается новое множество номеров trace-файлов, в котором находятся номера созданных trace-файлов.

Если при открытии текущего trace-файла выясняется, что его размер не кратен размеру страницы, то trace-файл автоматически выравнивается на границу страницы.

Для сохранения образа транзакции необходимо вызывать метод append.

Заметки:
В работе класса используется предположение, что указатель всегда будет находиться в конце файла. Поэтому не производится позиционирование указателя перед выполнением записи в файл.
Формат заголовка одной страницы.
// Значение контрольной суммы всей страницы.
oess_1::uint_t  m_checksum;
// Порядковый номер этой страницы в образе всей транзакции.
oess_1::uint_t  m_chain_ordinal;
// Общее количество страниц в образе транзакции.
oess_1::uint_t m_chain_size;
// Длина исходного образа транзакции в байтах.
oess_1::uint_t m_image_len;
// Контрольная сумма исходного образа.
oess_1::uint_t m_image_checksum;
oess_1::uint_t m_reserved[ 3 ];


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

 chain_ostream_t (const std::string &physic_name, trace_file_number_set_t &trace_file_numbers, oess_1::uint_t trace_file_page_size, oess_1::uint_t trace_file_size_limit, oess_1::uint_t trace_stream_buffered_pages)
 Инициализирующий конструктор.
virtual void append (const oess_1::char_t *image, oess_1::uint_t image_size)

Защищенные члены

oess_1::uint_t page_size () const
 Определить размер одной страницы.
void open_file_to_append (oess_1::uint_t file_ordinal)
 Открыть файл для дописывания.
void prepare_new_transaction (const oess_1::char_t *image, oess_1::uint_t image_size)
 Выполнить подготовку к сохранению новой транзакции.
void push_out_current_page ()
 Вытолкнуть текущую страницу в файл.
void complete_current_page ()
 Выполнят заполнение текущей страницы.
void flush_buffered_pages ()
 Запись буферизированных страниц на диск.
virtual void switch_to_next_trace_file ()
 Перейти к следующему trace-файлу.
void start_new_page ()
 Проинициализировать m_buf для новой страницы.
oess_1::uint_t current_file_to_append () const
 для дописывания новой транзакции в конец trace-stream.
Реализация унаследованных методов.
virtual oess_1::char_tout_reserve (size_t item_count, size_t item_size, size_t &item_available)
 можно записывать данные.
virtual void out_shift (size_t item_count, size_t item_size)
 Сдвинуть указатель.

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

std::string m_physic_name
 Физическое имя БД, для которой используется trace-файл.
trace_file_number_set_tm_trace_file_numbers
 Не должно быть пустым.
oess_1::uint_t m_trace_file_page_size
 Размер одной страницы trace-файла в байтах.
const oess_1::uint_t m_trace_file_size_limit
 Максимальный размер одного trace-файла в байтах.
oess_1::file::file_t m_file
 Текущий trace-файл, с которым идет работа.
std::vector< oess_1::char_tm_buf
 Образ текущей страницы.
oess_1::uint_t m_buf_size
 Количество занятых байт в образе страницы.
oess_1::io::mem_buf_t m_buffered_pages
 Буфер для промежуточного сохранения страниц перед записью.
Параметры транзакции.
Значения, которые остаются корректными и актуальными только во время работы метода append().

oess_1::uint_t m_image_len
 Длина образа транзакции.
oess_1::uint_t m_image_checksum
 Контрольная сумма образа транзакции.
oess_1::uint_t m_chain_page_ordinal
 Номер текущей страницы внутри транзакции.
oess_1::uint_t m_chain_page_count
 Количество всех страниц trace-файла для образа транзакции.


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

chain_ostream_t ( const std::string &  physic_name,
trace_file_number_set_t trace_file_numbers,
oess_1::uint_t  trace_file_page_size,
oess_1::uint_t  trace_file_size_limit,
oess_1::uint_t  trace_stream_buffered_pages 
)

Инициализирующий конструктор.

Сразу открывает текущий trace-файл и, если нужно, обеспечивает его выравнивание.

Аргументы:
physic_name  Физическое имя БД, с которой происходит работа.
trace_file_numbers  Множество номеров существующих trace-файлов. Не должно быть пустым.
trace_file_page_size  Размер одной страницы trace-файла в байтах.
trace_file_size_limit  Максимальная длина одного trace-файла в байтах.
trace_stream_buffered_pages  Количество страниц, которые могут быть буферизированны в памяти перед записью на диск.


Методы

void append ( const oess_1::char_t image,
oess_1::uint_t  image_size 
) [virtual]

Сохранить описание транзакции в файле.

Переопределяется в last_trx_only_chain_ostream_t.

void complete_current_page (  )  [protected]

Выполнят заполнение текущей страницы.

Выставляет поля заголовка и вычисляет checksum.

Увеличивает значение m_chain_page_ordinal на единицу.

oess_1::uint_t current_file_to_append (  )  const [inline, protected]

для дописывания новой транзакции в конец trace-stream.

Возвращает:
максимальный элемент из m_trace_file_numbers.

void flush_buffered_pages (  )  [protected]

Запись буферизированных страниц на диск.

Если текущий trace-файл оказывается заполненым, то осуществляется автоматический переход к следующему файлу.

void open_file_to_append ( oess_1::uint_t  file_ordinal  )  [protected]

Открыть файл для дописывания.

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

Аргументы:
file_ordinal  Порядковый номер trace-файла.

oess_1::char_t * out_reserve ( size_t  item_count,
size_t  item_size,
size_t &  item_available 
) [protected, virtual]

можно записывать данные.

Если нет достаточного объема данных для чтения хотя бы одного элемента, то должно порождаться исключение.

Замещает obinstream_t.

void out_shift ( size_t  item_count,
size_t  item_size 
) [protected, virtual]

Сдвинуть указатель.

Вызывается после успешной записи в буфер, указатель на который был возвращен методом out_reserve.

Замещает obinstream_t.

void prepare_new_transaction ( const oess_1::char_t image,
oess_1::uint_t  image_size 
) [protected]

Выполнить подготовку к сохранению новой транзакции.

Формирует значения полей m_image_len, m_image_checksum.

Вычисляет значение m_chain_page_ordinal.

Обнуляет m_chain_page_ordinal.

void push_out_current_page (  )  [protected]

Вытолкнуть текущую страницу в файл.

Заполняет m_buf заголовком и checksum, после чего записывает страницу в конец текущего trace-файла. Если же текущий trace-файл уже достиг максимального размера, то автоматически начинает новый trace-файл.

void start_new_page (  )  [inline, protected]

Проинициализировать m_buf для новой страницы.

Обнуляет m_buf и выставляет m_buf_size так, что страница содержит только заголовок и checksum.

void switch_to_next_trace_file (  )  [protected, virtual]

Перейти к следующему trace-файлу.

Объявлен виртуальным методом для того, чтобы дать возможность производным классам выполнить какие-то действия при переходе к следующему trace-файлу.

Переопределяется в last_trx_only_chain_ostream_t.


Данные класса

std::vector< oess_1::char_t > m_buf [protected]

Образ текущей страницы.

В процессе формирования страницы не содержит заголовка. Заголовок добавляется только перед вытеснением страницы в файл.

oess_1::uint_t m_buf_size [protected]

Количество занятых байт в образе страницы.

Учитывает так же поля checksum и header.


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