SObjectizer  5.1
Открытые члены | Закрытые члены | Закрытые данные | Полный список членов класса
Класс so_5_transport::channel_output_stream_t

Исходящий oess_2::io поток вставляющий данные в scattered_block_stream_t. Подробнее...

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

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

 channel_output_stream_t (const scattered_block_stream_ref_t &scattered_block_stream, const ACE_Time_Value &free_blocks_awaiting_timeout)
 
void begin_transaction ()
 Начать транзакцию записи данных. Подробнее...
 
void checkpoint ()
 Установить контрольную точку (промежуточное подтверждение транзакции). Подробнее...
 
void commit_transaction ()
 Подтвердить транзакцию записи данных. Подробнее...
 
void rollback_transaction ()
 Отменить транзакцию записи данных. Подробнее...
 
size_t bytes_written () const
 Сколько байт записано в поток. Подробнее...
 

Закрытые члены

void flush ()
 Сбросить данные готовые к отправке.
 
void occupy_next_block ()
 Получить очередной блок для записи в него данных.
 
void release_blocks ()
 Освободить имеющиеся блоки.
 
Перегрузка методов базового класса.
virtual oess_2::char_t * out_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)
 Сдвинуть указатель. Подробнее...
 

Закрытые данные

bool m_trx_running
 Флаг-состояние: находтся ли поток в процессе выполнения транзакции.
 
size_t m_bytes_written
 Количество байт записанных в поток.
 
scattered_block_stream_ref_t m_block_destination
 откуда брать свободные блоки и поток куда вставлять данные.
 
ACE_Time_Value m_free_blocks_awaiting_timeout
 Сколько времени можно ожидать прихода новых блоков.
 
raw_block_tm_current_block
 Текущий блок.
 
raw_block_chain_t m_ready_blocks
 Блоки которые записаны, но не отправлены.
 
std::array< oess_2::char_t, 16 > m_internal_buf
 

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

Исходящий oess_2::io поток вставляющий данные в scattered_block_stream_t.

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

so_5_transport::channel_output_stream_t::channel_output_stream_t ( const scattered_block_stream_ref_t scattered_block_stream,
const ACE_Time_Value &  free_blocks_awaiting_timeout 
)
Аргументы
free_blocks_awaiting_timeoutСколько времени можно потратить на ожидание свободных блоков.

Методы

void so_5_transport::channel_output_stream_t::begin_transaction ( )

Начать транзакцию записи данных.

Приводит поток в состояние готовности к записи данных.

Заметки
Если в момент начала на потоке происходила транзакция, то она отменяется и начаинается новая.

Перекрестные ссылки m_bytes_written, m_trx_running и rollback_transaction().

size_t so_5_transport::channel_output_stream_t::bytes_written ( ) const

Сколько байт записано в поток.

Заметки
Содержит актуальное значение только если транзакция активна.

Перекрестные ссылки m_bytes_written.

void so_5_transport::channel_output_stream_t::checkpoint ( )

Установить контрольную точку (промежуточное подтверждение транзакции).

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

Перекрестные ссылки flush(), m_bytes_written и m_trx_running.

void so_5_transport::channel_output_stream_t::commit_transaction ( )

Подтвердить транзакцию записи данных.

Вставляет накопленные блоки с записанными данными в поток.

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

oess_1::char_t * so_5_transport::channel_output_stream_t::out_reserve ( size_t  item_count,
size_t  item_size,
size_t &  item_available 
)
privatevirtual

Метод для определения указателя, в который можно записывать данные.

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

Аргументы
item_countКоличество элементов, которые нужно записать.
item_sizeРазмер одного элемента в байтах.
item_availableКоличество элементов, доступных для записи по возвращенному указателю.

Перекрестные ссылки so_5_transport::raw_block_t::current_write_ptr(), m_current_block, m_internal_buf, occupy_next_block() и so_5_transport::raw_block_t::write_size_available().

void so_5_transport::channel_output_stream_t::out_shift ( size_t  item_count,
size_t  item_size 
)
privatevirtual

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

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

Аргументы
item_countКоличество успешно записанных элементов.
item_sizeРазмер одного элемента в байтах.

Перекрестные ссылки so_5_transport::raw_block_t::current_write_ptr(), m_bytes_written, m_current_block, m_internal_buf, occupy_next_block(), so_5_transport::raw_block_t::shift_write_pos() и so_5_transport::raw_block_t::write_size_available().

void so_5_transport::channel_output_stream_t::rollback_transaction ( )

Отменить транзакцию записи данных.

Отменяет все операции записи в рамках транзакции и освобождает блоки.

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

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

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

std::array< oess_2::char_t, 16 > so_5_transport::channel_output_stream_t::m_internal_buf
private

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

Заметки
В данный момент oess_2::io::obinstream_t записывает данные таких типов, что размер одного элемента этих типов не превышает 8 байт (Например double или long int), поэтому буфера в 16 байт достаточно для записи элемента любого типа, для которого определена запись через oess_2::io::obinstream_t. Если со временем в oess_2::io::obinstream_t добавится запись типа который не вмещается в 16 байт то размер буфера надо будет увеличить.

Используется в out_reserve() и out_shift().


Документация по SObjectizer v.5.1 'Джимара'. Последние изменения: Ср 15 Май 2013 12:56:24. Создано системой  doxygen1.8.3.1 Intervale SourceForge.net Logo