obj.h - Man Page

Составные объекты

Synopsis

#include 'bee2/defs.h'

Классы

struct obj_hdr_t
Заголовок объекта

Макросы

#define objKeep(obj)   (((const obj_hdr_t*)(obj))->keep)
Размер объекта
#define objPCount(obj)   (((const obj_hdr_t*)(obj))->p_count)
Число указателей
#define objOCount(obj)   (((const obj_hdr_t*)(obj))->o_count)
Число указателей на объекты
#define objPtr(obj,  i,  type)   (((type**)((octet*)(obj) + sizeof(obj_hdr_t)))[i])
Указатель
#define objCPtr(obj,  i,  type)   (((const type* const*)((const octet*)(obj) + sizeof(obj_hdr_t)))[i])
Const-указатель
#define objEnd(obj,  type)   ((type*)((octet*)(obj) + objKeep(obj)))
Окончание объекта

Функции

bool_t objIsOperable (const void *obj)
Работоспособный объект?
bool_t objIsOperable2 (const void *obj)
Работоспособный отдельный объект?
void objCopy (void *dest, const void *src)
Копирование объекта
void objAppend (void *dest, const void *src, size_t i)
Присоединение объекта

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

Объект представляет собой размеченный фрагмент памяти. Для разметки используются указатели, которые ссылаются на различные участки фрагмента. Ссылочными участками могут быть другие объекты, которые называются вложенными. Ссылки на внутренние участки обновляются при перемещении объекта.

Объект начинается с заголовка типа obj_hdr_t. В заголовке указывается размер участка памяти, занимаемой объектом (keep), количество указателей (p_count) и количество указателей на ссылочные объекты (o_count).

После заголовка следует таблица указателей. Указатели на объекты помещаются в начало списка.

Указатели в таблице могут ссылаться не только на внутренние участки памяти, но и на внешние, т.е. лежащие вне фрагмента, принадлежащего объекту. Внешние ссылки остаются постоянными при перемещении объекта.

Макросы

#define objCPtr(obj, i, type)   (((const type* const*)((const octet*)(obj) + sizeof(obj_hdr_t)))[i])

Определяется i-й элемент таблицы указателей, который интерпретируется как указатель на тип const type.

#define objEnd(obj, type)   ((type*)((octet*)(obj) + objKeep(obj)))

Определяется адрес окончания фрагмента памяти, занимаемой объектом obj. Адрес интерпретируется как указатель на тип type

#define objPtr(obj, i, type)   (((type**)((octet*)(obj) + sizeof(obj_hdr_t)))[i])

Определяется i-й элемент таблицы указателей, который интерпретируется как указатель на тип type.

Функции

void objAppend (void * dest, const void * src, size_t i)

Объект src записывается в конец объекта src. В i-ую ячейку таблицы указателей dest записывается ссылка на копию src. Длина dest увеличивается на длину src.

Предусловие

Объекты src и dest работоспособны.

По адресу objEnd(dest, void) зарезервировано objKeep(src) октетов.

i < objOCount(dest).

Аргументы

dest объект-контейнер  
src присоединяемый объект  
i номер присоединяемого объекта

void objCopy (void * dest, const void * src)

Объект src копируется по адресу dest.

Предусловие

Объект src работоспособен.

По адресу dest зарезервировано objKeep(src) октетов.

Прим.

При копировании настраиваются указатели, в том числе указатели на вложенные объекты.

Аргументы

dest объект-назначение  
src объект-источник

bool_t objIsOperable (const void * obj)

Проверяется работоспособность объекта obj и вложенных в него объектов.

Возвращает

Признак работоспособности.

Аргументы

obj объект

bool_t objIsOperable2 (const void * obj)

Проверяется работоспособность объекта obj. Работоспособность вложенных в obj объектов не проверяется.

Возвращает

Признак работоспособности.

Аргументы

obj объект

Автор

Автоматически создано Doxygen для Библиотека Bee2 из исходного текста.

Info

Вт 23 Янв 2024 00:00:00 Библиотека Bee2