1obj.h(3) Library Functions Manual obj.h(3)
2
3
4
6 obj.h - Составные объекты
7
8
10 #include 'bee2/defs.h'
11
12
13 Классы
14 struct obj_hdr_t
15 Заголовок объекта
16
17 Макросы
18 #define objKeep(obj) (((const obj_hdr_t*)(obj))->keep)
19 Размер объекта
20 #define objPCount(obj) (((const obj_hdr_t*)(obj))->p_count)
21 Число указателей
22 #define objOCount(obj) (((const obj_hdr_t*)(obj))->o_count)
23 Число указателей на объекты
24 #define objPtr(obj, i, type) (((type**)((octet*)(obj) +
25 sizeof(obj_hdr_t)))[i])
26 Указатель
27 #define objCPtr(obj, i, type) (((const type* const*)((const
28 octet*)(obj) + sizeof(obj_hdr_t)))[i])
29 Const-указатель
30 #define objEnd(obj, type) ((type*)((octet*)(obj) + objKeep(obj)))
31 Окончание объекта
32
33 Функции
34 bool_t objIsOperable (const void *obj)
35 Работоспособный объект?
36 bool_t objIsOperable2 (const void *obj)
37 Работоспособный отдельный объект?
38 void objCopy (void *dest, const void *src)
39 Копирование объекта
40 void objAppend (void *dest, const void *src, size_t i)
41 Присоединение объекта
42
44 Объект представляет собой размеченный фрагмент памяти. Для разметки
45 используются указатели, которые ссылаются на различные участки
46 фрагмента. Ссылочными участками могут быть другие объекты, которые
47 называются вложенными. Ссылки на внутренние участки обновляются при
48 перемещении объекта.
49
50 Объект начинается с заголовка типа obj_hdr_t. В заголовке указывается
51 размер участка памяти, занимаемой объектом (keep), количество
52 указателей (p_count) и количество указателей на ссылочные объекты
53 (o_count).
54
55 После заголовка следует таблица указателей. Указатели на объекты
56 помещаются в начало списка.
57
58 Указатели в таблице могут ссылаться не только на внутренние участки
59 памяти, но и на внешние, т.е. лежащие вне фрагмента, принадлежащего
60 объекту. Внешние ссылки остаются постоянными при перемещении объекта.
61
63 #define objCPtr(obj, i, type) (((const type* const*)((const
64 octet*)(obj) + sizeof(obj_hdr_t)))[i])
65 Определяется i-й элемент таблицы указателей, который интерпретируется
66 как указатель на тип const type.
67
68 #define objEnd(obj, type) ((type*)((octet*)(obj) + objKeep(obj)))
69 Определяется адрес окончания фрагмента памяти, занимаемой объектом obj.
70 Адрес интерпретируется как указатель на тип type
71
72 #define objPtr(obj, i, type) (((type**)((octet*)(obj) +
73 sizeof(obj_hdr_t)))[i])
74 Определяется i-й элемент таблицы указателей, который интерпретируется
75 как указатель на тип type.
76
78 void objAppend (void * dest, const void * src, size_t i)
79 Объект src записывается в конец объекта src. В i-ую ячейку таблицы
80 указателей dest записывается ссылка на копию src. Длина dest
81 увеличивается на длину src.
82
83 Предусловие
84 Объекты src и dest работоспособны.
85
86 По адресу objEnd(dest, void) зарезервировано objKeep(src) октетов.
87
88 i < objOCount(dest).
89
90 Аргументы
91 dest объект-контейнер
92 src присоединяемый объект
93 i номер присоединяемого объекта
94
95 void objCopy (void * dest, const void * src)
96 Объект src копируется по адресу dest.
97
98 Предусловие
99 Объект src работоспособен.
100
101 По адресу dest зарезервировано objKeep(src) октетов.
102
103 Прим.
104 При копировании настраиваются указатели, в том числе указатели на
105 вложенные объекты.
106
107 Аргументы
108 dest объект-назначение
109 src объект-источник
110
111 bool_t objIsOperable (const void * obj)
112 Проверяется работоспособность объекта obj и вложенных в него объектов.
113
114 Возвращает
115 Признак работоспособности.
116
117 Аргументы
118 obj объект
119
120 bool_t objIsOperable2 (const void * obj)
121 Проверяется работоспособность объекта obj. Работоспособность вложенных
122 в obj объектов не проверяется.
123
124 Возвращает
125 Признак работоспособности.
126
127 Аргументы
128 obj объект
129
131 Автоматически создано Doxygen для Библиотека Bee2 из исходного текста.
132
133
134
135Библиотека Bee2 Ср 19 Июл 2023 00:00:00 obj.h(3)