1util.h(3)                  Library Functions Manual                  util.h(3)
2
3
4

NAME

6       util.h - Вспомогательные функции и макросы
7
8

SYNOPSIS

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                 Пт 23 Июн 2023                       util.h(3)
Impressum