SObjectizer
5.1
|
Входящий oess_2::io::ibinstream_t поток берущий данные из scattered_block_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_t * | m_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 | ( | ) |
Установить контрольную точку (промежуточное подтверждение транзакции).
Подтверждает зачитанные результаты, но позволяет и дальше работать с потоком. Если после этого будет иницирована отмена транзакции, то она откатиться к состоянию зафиксированому последней контрольной точкой.
|
privatevirtual |
Метод для определения указателя, из которого можно считывать данные.
item_count | Количество элементов, которые нужно прочитать. |
item_size | Размер одного элемента в байтах. |
item_available | Количество элементов, доступных по возвращенному указателю. |
Перекрестные ссылки so_5_transport::rc_not_enough_data_to_read_from_buffer.
|
privatevirtual |
Сдвинуть указатель.
item_count | Количество успешно прочитанных элементов. |
item_size | Размер одного элемента в байтах. |
Перекрестные ссылки so_5_transport::raw_block_t::read_size_available().
void so_5_transport::channel_input_stream_t::rollback_transaction | ( | ) |
Отменить транзакцию чтения данных.
Отменяет все операции чтения в рамках транзакции и кладет их обратно в поток.
|
private |
Начальная позиция первого блока.
Если транзакцию надо будет отменить, то первый блок должен иметь ту же позицию в буфере.
|
private |
Внутренний буфер для данных, которые располагаются на границе 2-ух блоков.
Документация по SObjectizer v.5.1 'Джимара'. Последние изменения: Ср 15 Май 2013 12:56:24. Создано системой 1.8.3.1 |