xxhash
Чрезвычайно быстрая некриптографическая хеш-функция, обеспечивающая высокую производительность на всех типах входных данных, превосходя по скорости многие популярные хеш-функции при сохранении хорошего качества распределения. Библиотека предоставляет простые API для вычисления хешей от произвольных данных, поддерживает потоковый режим и может использоваться в широком спектре приложений: от хеш-таблиц до контроля целостности данных.
Особенности
- исключительно высокая скорость (близка к пропускной способности RAM);
- поддержка 32- и 64-битных хешей;
- современный алгоритм XXH3 с 64- и 128-битными вариантами;
- потоковый API для обработки данных по частям.
Основные компоненты
Библиотека предоставляет несколько семейств хеш-функций и соответствующие API (подробнее с документацией можно ознакомиться здесь).
Базовые функции
Простые функции для вычисления хеша из целого блока данных за один вызов. Они идеально подходят для ситуаций, когда все данные доступны сразу.
Основные функции:
XXH32(input, length, seed)— вычисление 32-битного хеша;XXH64(input, length, seed)— вычисление 64-битного хеша;XXH32_createState()/XXH64_createState()— создание состояния для потокового вычисления;XXH32_update(state, input, length)— добавление данных в состояние;XXH32_digest(state)— получение итогового хеша после всех обновлений;XXH32_copyState(dst, src)— копирование состояния.
XXH3
XXH3 — более быстрая и качественная хеш-функция, доступная в 64-битной и 128-битной версиях. Она использует широкие векторные инструкции и даёт лучшую производительность на длинных входах.
Основные функции:
XXH3_64bits(input, length)— вычисление 64-битного хеша (seed не требуется, но может быть добавлен черезXXH3_64bits_withSeed);XXH3_128bits(input, length)— вычисление 128-битного хеша;XXH3_64bits_withSecret(input, length, secret)— использование пользовательского секрета для кастомизации;XXH3_64bits_update()/XXH3_64bits_digest()— потоковый режим для XXH3;XXH_INLINE_XXH3— макрос для включения inline-реализации XXH3.
Потоковый API
Для обработки больших данных, которые не помещаются в памяти, библиотека предоставляет потоковый интерфейс. Он позволяет разбить данные на части и обрабатывать их последовательно.
Основные функции потокового API (для XXH64, аналогично для других вариантов):
XXH64_createState()— создание и инициализация состояния;XXH64_reset(state, seed)— сброс состояния с новым seed;XXH64_update(state, input, length)— добавление порции данных;XXH64_digest(state)— завершение вычисления и получение хеша;XXH64_freeState(state)— освобождение состояния.