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

Входящий oess_2::io::ibinstream_t поток берущий данные из scattered_block_stream_t. Подробнее...

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

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

 channel_input_stream_t (const scattered_block_stream_ref_t &scattered_block_stream)
 
void begin_transaction ()
 Забирает из потока блоков все блоки и организует поток чтения над ними. Подробнее...
 
void checkpoint ()
 Установить контрольную точку (промежуточное подтверждение транзакции). Подробнее...
 
void commit_transaction ()
 Подтвердить транзакцию чтения данных.
 
void rollback_transaction ()
 Отменить транзакцию чтения данных. Подробнее...
 
size_t bytes_available () const
 Количество доступных в потоке байт.
 
virtual bool eof () const
 Достигнут ли конец потока.
 

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

 channel_input_stream_t (const channel_input_stream_t &)
 
void operator= (const channel_input_stream_t &)
 
Перегрузка методов базового класса.
virtual const oess_2::char_t * in_reserve (size_t item_count, size_t item_size, size_t &item_available)
 Метод для определения указателя, из которого можно считывать данные. Подробнее...
 
void copy_devided_item_to_internal_buffer (size_t item_size)
 Вспомогательный метод для копирования во внутренний буффер элемента, который находится в 2-ух блоках.
 
virtual void in_shift (size_t item_count, size_t item_size)
 Сдвинуть указатель. Подробнее...
 

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

scattered_block_stream_ref_t m_block_source
 Источник блоков.
 
std::array< oess_2::char_t, 16 > m_internal_buf
 

Сведения о транзакции.

size_t m_bytes_initially_available
 Количество байт которое изначально было доступно в потоке.
 
size_t m_bytes_available
 Количество доступных для чтения в потоке.
 
size_t m_first_block_initial_pos
 Начальная позиция первого блока. Подробнее...
 
raw_block_tm_current_block
 Текущий блок.
 
raw_block_chain_t m_touched_list
 Блоки которые уже вычитаны, но транзакция еще не подтверждена.
 
raw_block_chain_t m_untouched_list
 Блоки которые еще не вычитаны в рамках текущей транзакции.
 
void reset_transaction_data ()
 

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

Входящий oess_2::io::ibinstream_t поток берущий данные из scattered_block_stream_t.

Работа с потоком базируется на понятии транзакции чтения данных. С началом транзакции поток извлекает все данные из потока, и запоминает сколько байт доступно для чтения. После начала транзакции количество еще не прочитанных байт доступно через метод bytes_available().

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

После того как из потока зачитаны все данные, которые сочтено возможным зачитать, надо подтвердить транзакцию через метод commit_transaction().

После подтверждения или отмены транзакции поток не содержит никаких данных, а попытка чтения приводит к исключению.

Методы

void so_5_transport::channel_input_stream_t::begin_transaction ( )

Забирает из потока блоков все блоки и организует поток чтения над ними.

При начале транзакция фиксируетя начальная контрольная точка.

void so_5_transport::channel_input_stream_t::checkpoint ( )

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

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

const oess_2::char_t * so_5_transport::channel_input_stream_t::in_reserve ( size_t  item_count,
size_t  item_size,
size_t &  item_available 
)
privatevirtual

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

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

Перекрестные ссылки so_5_transport::rc_not_enough_data_to_read_from_buffer.

void so_5_transport::channel_input_stream_t::in_shift ( size_t  item_count,
size_t  item_size 
)
privatevirtual

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

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

Перекрестные ссылки so_5_transport::raw_block_t::read_size_available().

void so_5_transport::channel_input_stream_t::rollback_transaction ( )

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

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

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

size_t so_5_transport::channel_input_stream_t::m_first_block_initial_pos
private

Начальная позиция первого блока.

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

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

Внутренний буфер для данных, которые располагаются на границе 2-ух блоков.

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

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