util.h - Man Page
Вспомогательные функции и макросы
Synopsis
#include 'bee2/defs.h'
Макросы
#define COUNT_OF(a)
Число элементов в массиве a.
#define LAST_OF(a)
Число элементов в массиве a.
#define CASSERT(e)
Компиляция с проверкой условия
#define VERIFY(e)
Проверяется выполнение условия
#define EXPECT(a)
Ожидается выполнение условия
#define SWAP(a, b)
Поменять местами значения переменных a и b.
#define SWAP_PTR(a, b)
Поменять местами значения указателей a и b.
Функции
void utilAssert (int e, const char *file, int line)
Предполагается выполнение условия
const char * utilVersion ()
Версия
bool_t utilOnExit (void(*fn)())
Регистрация деструктора
size_t utilMin (size_t n,...)
Минимум
size_t utilMax (size_t n,...)
Максимум
u32 utilCRC32 (const void *buf, size_t count, u32 state)
Контрольная сумма CRC32.
u32 utilFNV32 (const void *buf, size_t count, u32 state)
Контрольная сумма FNV32.
u32 utilNonce32 ()
32-разрядный нонс
Макросы
#define CASSERT( e)
Макроопределение:
((void)sizeof(char[1 - 2 * !(e)]))
Для отладочной версии вычислить e и завершить компиляцию, если e == 0.
#define EXPECT( a)
Ожидать выполнения a, ничего не предпринимая.
Прим.
Макрос EXPECT указывает на условия, которые ожидаются, но все таки могут быть нарушены. Примеры условий: простота числа, неприводимость многочлена, корректность эллиптической кривой.
Ожидаемые условия могут быть труднопроверяемыми. Поэтому программы не могут полагаться на безусловное выполнение этих условий и должны устойчиво работать даже при их нарушении. Например, программа сложения точек эллиптической кривой над простым полем GF(p) должна завершать сложение даже если p -- составное.
Следует четко разграничивать ASSERT (как правило, самоконтроль программиста) и EXPECT (как правило, контроль входных данных).
Некоторые ожидаемые условия могут частично проверяться. Например, EXPECT(p -- нечетное простое) может быть поддержано проверкой ASSERT(p -- нечетное). Безусловные проверки, поддерживающие ожидаемые условия, должны по возможности документироваться.
#define LAST_OF( a)
Макроопределение:
((a)[COUNT_OF(a) - 1])
Предусловие
Массив непустой.
#define SWAP( a, b)
Макроопределение:
(a) ^= (b), (b) ^= (a), (a) ^= (b)
Предусловие
Переменные имеют один тип.
Переменные являются целочисленными, допускающими операцию ^.
Переменные a и b различны.
Прим.
Если a и b --- это одна и та же переменная, то она будет обнулена. Безопасный код:
a != b ? SWAP(a, b) : 0;
#define SWAP_PTR( a, b)
Макроопределение:
*((octet**)&(a)) = (octet*)(a) - ((octet*)(b) - (octet*)0),\ *((octet**)&(b)) = (octet*)(b) + ((octet*)(a) - (octet*)0),\ *((octet**)&(a)) = (octet*)(b) - ((octet*)(a) - (octet*)0)
Предусловие
Переменные a и b различны.
#define VERIFY( e)
Макроопределение:
{if (!(e)) ASSERT(0);}
Вычислить e (всегда) и завершить выполнение, если a == 0 (при отладке).
Функции
void utilAssert (int e, const char * file, int line) [extern]
Для отладочной версии вычислить e и завершить выполнение, если e == 0.
Прим.
Используется собственная редакция макроса assert(). В стандартной редакции есть проверка условия. При правильной работе программы условие никогда не выполняется, и анализаторы покрытия тестами могут показывать только частичное покрытие.
u32 utilCRC32 (const void * buf, size_t count, u32 state)
Определяется контрольная сумма буфера [count]buf. При расчете контрольной суммы используется состояние state. Контрольная сумма рассчитывается по алгоритму CRC32 из стандарта ISO 3309.
Прим.
Контрольную сумму большого фрагмента данных можно определять последовательно путем многократных обращений к функции. При первом обращении состояние state должно быть нулевым.
Возвращает
Контрольная сумма.
- Аргументы
buf буфер
count число октетов
state [in,out] состояние
u32 utilFNV32 (const void * buf, size_t count, u32 state)
Определяется контрольная сумма буфера [count]buf. При расчете контрольной суммы используется состояние state. Контрольная сумма рассчитывается по алгоритму FNV-1a с размерностью 32 (http://isthe.com/chongo/tech/comp/fnv/).
Прим.
Контрольную сумму большого фрагмента данных можно определять последовательно путем многократных обращений к функции. При первом обращении state должно равняться 2166136261 = 0x811C9DC5.
Возвращает
Контрольная сумма.
- Аргументы
buf буфер
count число октетов
state [in,out] состояние
size_t utilMax (size_t n, ...)
Определяется максимум из n чисел типа size_t, переданных как дополнительные параметры.
- Предусловие
n > 0.
Возвращает
Максимум.
- Аргументы
n количество чисел
... числа
size_t utilMin (size_t n, ...)
Определяется минимум из n чисел типа size_t, переданных как дополнительные параметры.
- Предусловие
n > 0.
Возвращает
Минимум.
- Аргументы
n количество чисел
... числа
u32 utilNonce32 ()
По уникальным системным данным (дата, время) строится 32-разрядный нонс.
Возвращает
Нонс.
Прим.
Нонс (калька с англ. nonce) --- "слабо" повторяющееся значение, которое используется в криптографических протоколах. С помощью нонсов можно инициализовать генераторы псевдослучайных чисел (см. prngCOMBOStart()).
bool_t utilOnExit (void(* fn )())
Регистрируется функция fn, которая будет вызвана при завершении работы программы / выгрузке динамической библиотеки.
Возвращает
Признак успеха.
Прим.
Зарегистрированные функции вызываются в порядке LIFO (last-in-first-out).
Одна и та же функция может быть зарегистрирована несколько раз.
- Аргументы
fn функция
const char * utilVersion ()
Определяется версия библиотеки bee2.
Возвращает
Версия в виде строки major.minor.patch.
Автор
Автоматически создано Doxygen для Библиотека Bee2 из исходного текста.