Класс isubbinstream_t

#include <subbinstream.hpp>

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

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

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

Двоичный подпоток ввода.

Реализация интерфейса obinstream_t для чтения из некоторого потока не более указаного количества байт.

При извлечении их входного потока составных TLV (oess_1::tlv::compound_tlv_t) возникает задача прочитать из уже существующего потока не более Length байт. При этом операции чтения могут выполняться несколькими объектами (дочерними TLV) и определить сколько именно было прочитано каждым из объектов может быть невозможно. Можно было бы создать промежуточный буфер и записать в него Length байт из входного потока, а затем осуществлять чтение объектов из этого буфера. Но это требует дополнительных расходов памяти.

Класс isubbinstream_t предназначен для решения подобных задач. Он перенаправляет все операции чтения в исходный поток. Но при этом контролируется, сколько байт было прочитано. Считается, что подпоток исчерпывается после того, как из исходного потока будет прочитано Length байт.

Если с помощью класса isubbinstream_t из исходного потока было извлечено менее Length байт, то класс isubbinstream_t не пытается изъять из исходного потока невыбранные байты.

Заметки:
v.1.1.1 Сделан производным от oess_1::io::ibinbuffer_t.


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

 isubbinstream_t (ibinstream_t &source, size_t capacity)
size_t capacity () const
 Емкость подпотока.
virtual size_t size () const
 Объем находящихся в потоке данных.
virtual size_t pos () const
 Количество прочитанных из подпотока байт.
virtual bool eof () const
 Возвращает true, если pos() == capacity().

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

virtual const oess_1::char_tin_reserve (size_t item_count, size_t item_size, size_t &item_available)
 Реализация метода из базового класса.
virtual void in_shift (size_t item_count, size_t item_size)
 Реализация метода из базового класса.

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

 isubbinstream_t (const isubbinstream_t &)
 Защита от копирования.
isubbinstream_toperator= (const isubbinstream_t &)
 Защита от копирования.

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

ibinstream_tm_source
 Исходный поток.
size_t m_capacity
 Максимальный объем подпотока.
size_t m_pos
 Количество прочитанных из подпотока байт.


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

isubbinstream_t ( ibinstream_t source,
size_t  capacity 
)

Аргументы:
source  Исходный входной поток.
capacity  Максимальная емкость подпотока.


Методы

size_t capacity (  )  const

Емкость подпотока.

Возвращает:
значение емкости, полученное в конструкторе.

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

Реализация метода из базового класса.

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

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

Замещает ibinbuffer_t.

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

Реализация метода из базового класса.

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

Замещает ibinbuffer_t.

size_t size (  )  const [virtual]

Объем находящихся в потоке данных.

Возвращает:
значение емкости, полученное в конструкторе.

Замещает ibinbuffer_t.


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

size_t m_capacity [private]

Максимальный объем подпотока.

Задается в конструкторе.


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