#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 | ) |
Обменять значения двух буферов.
Происходит обмен только описателями буфером. Копирование данных между буферами не происходит.