1util.h(3) Library Functions Manual util.h(3)
2
3
4
6 util.h - Вспомогательные функции и макросы
7
8
10 #include 'bee2/defs.h'
11
12
13 Макросы
14 #define COUNT_OF(a) (sizeof(a) / sizeof(*(a)))
15 Число элементов в массиве a.
16 #define LAST_OF(a) ((a)[COUNT_OF(a) - 1])
17 Число элементов в массиве a.
18 #define CASSERT(e) ((void)sizeof(char[1 - 2 * !(e)]))
19 Компиляция с проверкой условия
20 #define VERIFY(e) {if (!(e)) ASSERT(0);}
21 Проверяется выполнение условия
22 #define EXPECT(a)
23 Ожидается выполнение условия
24 #define SWAP(a, b) (a) ^= (b), (b) ^= (a), (a) ^= (b)
25 Поменять местами значения переменных a и b.
26 #define SWAP_PTR(a, b)
27 Поменять местами значения указателей a и b.
28
29 Функции
30 void utilAssert (int e, const char *file, int line)
31 Предполагается выполнение условия
32 const char * utilVersion ()
33 Версия
34 bool_t utilOnExit (void(*fn)())
35 Регистрация деструктора
36 size_t utilMin (size_t n,...)
37 Минимум
38 size_t utilMax (size_t n,...)
39 Максимум
40 u32 utilCRC32 (const void *buf, size_t count, u32 state)
41 Контрольная сумма CRC32.
42 u32 utilFNV32 (const void *buf, size_t count, u32 state)
43 Контрольная сумма FNV32.
44 u32 utilNonce32 ()
45 32-разрядный нонс
46
49 #define CASSERT(e) ((void)sizeof(char[1 - 2 * !(e)]))
50 Для отладочной версии вычислить e и завершить компиляцию, если e == 0.
51
52 #define EXPECT(a)
53 Ожидать выполнения a, ничего не предпринимая.
54
55 Прим.
56 Макрос EXPECT указывает на условия, которые ожидаются, но все таки
57 могут быть нарушены. Примеры условий: простота числа,
58 неприводимость многочлена, корректность эллиптической кривой.
59
60 Ожидаемые условия могут быть труднопроверяемыми. Поэтому программы
61 не могут полагаться на безусловное выполнение этих условий и должны
62 устойчиво работать даже при их нарушении. Например, программа
63 сложения точек эллиптической кривой над простым полем GF(p) должна
64 завершать сложение даже если p -- составное.
65
66 Следует четко разграничивать ASSERT (как правило, самоконтроль
67 программиста) и EXPECT (как правило, контроль входных данных).
68
69 Некоторые ожидаемые условия могут частично проверяться. Например,
70 EXPECT(p -- нечетное простое) может быть поддержано проверкой
71 ASSERT(p -- нечетное). Безусловные проверки, поддерживающие
72 ожидаемые условия, должны по возможности документироваться.
73
74 #define LAST_OF(a) ((a)[COUNT_OF(a) - 1])
75 Предусловие
76 Массив непустой.
77
78 #define SWAP(a, b) (a) ^= (b), (b) ^= (a), (a) ^= (b)
79 Предусловие
80 Переменные имеют один тип.
81
82 Переменные являются целочисленными, допускающими операцию ^.
83
84 Переменные a и b различны.
85
86 Прим.
87 Если a и b --- это одна и та же переменная, то она будет обнулена.
88 Безопасный код:
89
90 a != b ? SWAP(a, b) : 0;
91
92
93 #define SWAP_PTR(a, b)
94 Макроопределение:.PP
95 *((octet**)&(a)) = (octet*)(a) - ((octet*)(b) - (octet*)0),\
96 *((octet**)&(b)) = (octet*)(b) + ((octet*)(a) - (octet*)0),\
97 *((octet**)&(a)) = (octet*)(b) - ((octet*)(a) - (octet*)0)
98
99
100 Предусловие
101 Переменные a и b различны.
102
103 #define VERIFY(e) {if (!(e)) ASSERT(0);}
104 Вычислить e (всегда) и завершить выполнение, если a == 0 (при отладке).
105
107 void utilAssert (int e, const char * file, int line)
108 Для отладочной версии вычислить e и завершить выполнение, если e == 0.
109
110 Прим.
111 Используется собственная редакция макроса assert(). В стандартной
112 редакции есть проверка условия. При правильной работе программы
113 условие никогда не выполняется, и анализаторы покрытия тестами
114 могут показывать только частичное покрытие.
115
116 u32 utilCRC32 (const void * buf, size_t count, u32 state)
117 Определяется контрольная сумма буфера [count]buf. При расчете
118 контрольной суммы используется состояние state. Контрольная сумма
119 рассчитывается по алгоритму CRC32 из стандарта ISO 3309.
120
121 Прим.
122 Контрольную сумму большого фрагмента данных можно определять
123 последовательно путем многократных обращений к функции. При первом
124 обращении состояние state должно быть нулевым.
125
126 Возвращает
127 Контрольная сумма.
128
129 Аргументы
130 buf буфер
131 count число октетов
132 state состояние
133
134 u32 utilFNV32 (const void * buf, size_t count, u32 state)
135 Определяется контрольная сумма буфера [count]buf. При расчете
136 контрольной суммы используется состояние state. Контрольная сумма
137 рассчитывается по алгоритму FNV-1a с размерностью 32
138 (http://isthe.com/chongo/tech/comp/fnv/).
139
140 Прим.
141 Контрольную сумму большого фрагмента данных можно определять
142 последовательно путем многократных обращений к функции. При первом
143 обращении state должно равняться 2166136261 = 0x811C9DC5.
144
145 Возвращает
146 Контрольная сумма.
147
148 Аргументы
149 buf буфер
150 count число октетов
151 state состояние
152
153 size_t utilMax (size_t n, ...)
154 Определяется максимум из n чисел типа size_t, переданных как
155 дополнительные параметры.
156
157 Предусловие
158 n > 0.
159
160 Возвращает
161 Максимум.
162
163 Аргументы
164 n количество чисел
165 ... числа
166
167 size_t utilMin (size_t n, ...)
168 Определяется минимум из n чисел типа size_t, переданных как
169 дополнительные параметры.
170
171 Предусловие
172 n > 0.
173
174 Возвращает
175 Минимум.
176
177 Аргументы
178 n количество чисел
179 ... числа
180
181 u32 utilNonce32 ()
182 По уникальным системным данным (дата, время) строится 32-разрядный
183 нонс.
184
185 Возвращает
186 Нонс.
187
188 Прим.
189 Нонс (калька с англ. nonce) --- 'слабо' повторяющееся значение,
190 которое используется в криптографических протоколах. С помощью
191 нонсов можно инициализовать генераторы псевдослучайных чисел (см.
192 prngCOMBOStart()).
193
194 bool_t utilOnExit (void(*)() fn)
195 Регистрируется функция fn, которая будет вызвана при завершении работы
196 программы / выгрузке динамической библиотеки.
197
198 Возвращает
199 Признак успеха.
200
201 Прим.
202 Зарегистрированные функции вызываются в порядке LIFO (last-in-
203 first-out).
204
205 Одна и та же функция может быть зарегистрирована несколько раз.
206
207 Аргументы
208 fn функция
209
210 const char * utilVersion ()
211 Определяется версия библиотеки bee2.
212
213 Возвращает
214 Версия в виде строки major.minor.patch.
215
217 Автоматически создано Doxygen для Библиотека Bee2 из исходного текста.
218
219
220
221Библиотека Bee2 Ср 19 Июл 2023 00:00:00 util.h(3)