Класс mem_buf_t

#include <mem_buf.hpp>

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

ibinbuffer_t obinbuffer_t ibinstream_t obinstream_t istream_t ostream_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()
v.1.1.1
Сделан производным от oess_1::io::ibinbuffer_t, oess_1::io::obinbuffer_t.
Примеры:

sample/db_copy_content/main.cpp.


Открытые типы

 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_toperator= (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_tptr () const
 Указатель на начало всего буфера.
const oess_1::char_tcurrent_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_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)
 Реализация метода из базового класса.
virtual oess_1::char_tout_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  Новый размер данных.
Примеры:
sample/db_copy_content/main.cpp.

void erase ( size_t  from_offs,
size_t  count 
)

Изъять данные из буфера.

Изымается count байт начиная с позиции from_offs. Старое содержимое буфера "сжимается".

Поведение при from_offs > size() или при (from_offs + count > size()) не определено.

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().

Примеры:
sample/db_copy_content/main.cpp.

size_t size (  )  const [virtual]

Текущий размер буфера.

Объем данных, реально помещенных в буфер.

Замещает ibinbuffer_t.

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  ) 

Обменять значения двух буферов.

Происходит обмен только описателями буфером. Копирование данных между буферами не происходит.


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