#include <mem_buf.hpp>
Граф наследования:mem_buf_t:

Реализация инерфейсов ibinstream_t, obinstream_t для неограниченого буфера, который может автоматически увеличивать свой размер.
oess_1::io::mem_buf_t buf1( 1024 ); oess_1::io::mem_buf_t buf2( 2048 ); buf1.set_size( 256 ); buf1.set_pos( 26 ); buf2.set_size( 512 ); buf2.set_pos( 384 ); buf2 = buf1; // Теперь 26 == buf2.pos()
Открытые типы | |
| e_initial_capacity = 64 | |
| enum | { e_initial_capacity = 64 } |
Открытые члены | |
| mem_buf_t () | |
| mem_buf_t (size_t capacity) | |
| mem_buf_t (const mem_buf_t &o) | |
| Конструктор копирования. | |
| mem_buf_t & | operator= (const mem_buf_t &o) |
| virtual size_t | capacity () const |
| Текущая емкость буфера. | |
| void | change_capacity (size_t new_capacity, bool save_contents=true) |
| Пересоздать буфер. | |
| virtual size_t | size () const |
| Текущий размер буфера. | |
| void | change_size (size_t new_size) |
| Установить размер данных в буфере. | |
| virtual size_t | pos () const |
| очередная операция чтения или записи. | |
| void | set_pos (size_t pos) |
| очередная операци чтения или записи. | |
| virtual bool | eof () const |
| Возвращает true, если pos() == size(). | |
| const oess_1::char_t * | ptr () const |
| Указатель на начало всего буфера. | |
| const oess_1::char_t * | current_ptr () const |
| Указатель на текущую позицию в буфере. | |
| void | subbuf (size_t from_pos, mem_buf_t &to, size_t to_pos, size_t count) const |
| Выделение подбуфера. | |
| void | subbuf (size_t from_pos, void *to, size_t count) const |
| Выделение подбуфера. | |
| void | insert (size_t to_pos, const mem_buf_t &from, size_t from_pos, size_t count) |
| Вставка данных. | |
| void | insert (size_t to_pos, const void *from, size_t count) |
| Вставка данных. | |
| void | erase (size_t from_offs, size_t count) |
| Изъять данные из буфера. | |
| void | swap (mem_buf_t &o) |
| Обменять значения двух буферов. | |
Защищенные члены | |
| virtual const oess_1::char_t * | in_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) |
| Реализация метода из базового класса. | |
| virtual oess_1::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) |
| Реализация метода из базового класса. | |
Закрытые данные | |
| auto_ptr_3::vect_ptr_t< char > | m_buf |
| Буфер. | |
| size_t | m_size |
| Текущий размер буфера. | |
| size_t | m_pos |
| Текущая позиция в буфере. | |
| mem_buf_t | ( | ) |
Начальная емкость буфера определяется значением e_initial_capacity.
| mem_buf_t | ( | size_t | capacity | ) |
| capacity | Начальная емкость буфера. |
| void change_capacity | ( | size_t | new_capacity, | |
| bool | save_contents = true | |||
| ) |
Пересоздать буфер.
Буфер пересоздается всегда.
Если save_contents равно 'true', то текущее значение буфера сохраняется, а новый 'size' = min( new_capacity, size ) Текущая позиция обнуляется.
| new_capacity | Новая емкость буфера. |
| save_contents | Должно ли сохраняться предыдущее содержимое буфера. |
| void change_size | ( | size_t | new_size | ) |
Установить размер данных в буфере.
Текущая позиция обнуляется.
Размер буфера изменяется только если new_size <= capacity().
| new_size | Новый размер данных. |
| void erase | ( | size_t | from_offs, | |
| size_t | count | |||
| ) |
| 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.
| void insert | ( | size_t | to_pos, | |
| const void * | from, | |||
| size_t | count | |||
| ) |
Вставка данных.
Вставить count байт из from в позицию to_pos. Старое содержимое буфера "раздвигается".
Текущая позиция обнуляется.
Предполагается, что from указывает на блок памяти в котором храниться count байт.
Поведение при to_pos > size() не определено.
| void insert | ( | size_t | to_pos, | |
| const mem_buf_t & | from, | |||
| size_t | from_pos, | |||
| size_t | count | |||
| ) |
Вставка данных.
Вставить count байт из from c позиции from_pos в позицию to_pos. Старое содержимое буфера "раздвигается".
Текущая позиция обнуляется.
Текущая позиция в буфере-источнике не изменяется.
Наличие достаточного количества данных в from не проверяется.
Поведение при to_pos > size() не определено.
| to_pos | Позиция, куда будут вставляться данные. |
| from | Буфер-источник данных. |
| from_pos | Позиция в буфере-источнике, откуда нужно брать данные. |
| count | Количество копируемых байт. |
| oess_1::char_t * out_reserve | ( | size_t | item_count, | |
| size_t | item_size, | |||
| size_t & | item_available | |||
| ) | [protected, virtual] |
Реализация метода из базового класса.
| item_count | Количество элементов, которые нужно записать. |
| item_size | Размер одного элемента в байтах. |
| item_available | Количество элементов, доступных для записи по возвращенному указателю. |
Замещает obinbuffer_t.
| void out_shift | ( | size_t | item_count, | |
| size_t | item_size | |||
| ) | [protected, virtual] |
Реализация метода из базового класса.
| item_count | Количество успешно записанных элементов. |
| item_size | Размер одного элемента в байтах. |
Замещает obinbuffer_t.
| void set_pos | ( | size_t | pos | ) |
очередная операци чтения или записи.
Операция выполняется только, если pos <= size().
| size_t size | ( | ) | const [virtual] |
| void subbuf | ( | size_t | from_pos, | |
| void * | to, | |||
| size_t | count | |||
| ) | const |
Выделение подбуфера.
По указателю to копируется count байт с позиции from_pos.
Указатель to должен указывать на блок памяти достаточного размера, чтобы принять count байт.
Позиция в буфере-источнике не изменяется.
Наличие данных не контролируется.
| from_pos | Откуда начинать брать данные. |
| to | Указатель на блок памяти для приема данных. |
| count | Количество копируемых байт. |
| void subbuf | ( | size_t | from_pos, | |
| mem_buf_t & | to, | |||
| size_t | to_pos, | |||
| size_t | count | |||
| ) | const |
Выделение подбуфера.
В буфер to в позицию to_pos копируется count байт с позиции from_pos.
Содержимое буфера-приемника с позиции to_pos не сохраняется (перезаписываются count байт в буфере-приемнике).
Позиция в буфере-источнике не изменяется.
Наличие данных не контролируется.
| from_pos | Откуда начинать брать данные. |
| to | Буфер-приемник. |
| to_pos | В какую позицию в буфер приемник начинать запись. |
| count | Количество копируемых байт. |
| void swap | ( | mem_buf_t & | o | ) |
Обменять значения двух буферов.
Происходит обмен только описателями буфером. Копирование данных между буферами не происходит.
1.4.7