# farmhash

Семейство хеш-функций, разработанных Google для высокопроизводительного и качественного хеширования данных. Библиотека предоставляет эффективные реализации для различных архитектур и сценариев использования, фокусируясь на скорости и качестве распределения хешей.

## Особенности

- высокая производительность на современных процессорах;
- поддержка как 32-, так и 64-битных хешей;
- адаптация под различные размеры входных данных;
- портируемость и совместимость с C++11 и новее;
- качественные хеши с низкой вероятностью коллизий.

## Основные компоненты

FarmHash состоит из набора хеш-функций, оптимизированных для разных типов данных и размеров (подробнее с документацией можно ознакомиться [здесь](https://github.com/google/farmhash)).

### Хеширование строк и бинарных данных

Библиотека предоставляет несколько функций для хеширования строк и произвольных бинарных данных, обеспечивая баланс между скоростью и качеством хеширования. Эти функции подходят для использования в хеш-таблицах, проверках целостности и идентификации данных.

Основные функции хеширования:

- `farmhash::Hash32()` и `farmhash::Hash64()` — основные функции для вычисления 32- и 64-битных хешей;
- `farmhash::Hash128()` — возвращает 128-битный хеш в виде пары 64-битных значений;
- `farmhash::Fingerprint32()` и `farmhash::Fingerprint64()` — стабильные «отпечатки» для идентификации данных.

### Хеширование для различных типов данных

FarmHash включает специализированные функции для работы с определёнными типами данных, что позволяет достичь максимальной производительности для каждого конкретного случая. Алгоритмы автоматически адаптируются под размер входных данных.

Функции для различных типов:

- `farmhash::Hash()` — универсальная функция, автоматически выбирающая оптимальный алгоритм в зависимости от размера данных;
- поддержка хеширования целых чисел, указателей и структур с помощью `farmhash::Hash()` для встроенных типов.

### Вспомогательные утилиты

Библиотека также содержит вспомогательные функции для работы с хешами:

- `farmhash::HashLen16()` — быстрый хеш для данных длиной до 16 байт;
- `farmhash::HashLen0to16()` — оптимизация для очень коротких данных;
- `farmhash::HashLen17to32()` и `farmhash::HashLen33to64()` — специализированные функции для средних размеров.

### Гарантии качества

FarmHash разработан с акцентом на качество хеширования:

- все функции проходят строгие тесты на случайность и равномерность распределения;
- алгоритмы устойчивы к атакам на коллизии;
- поддержка санитайзеров (ASan, MSan, UBSan) для обеспечения безопасности.

### Интеграция и использование

Библиотека легко интегрируется в существующие проекты благодаря простому API:

- заголовочные файлы можно подключить напрямую без сборки;
- не зависит от сторонних библиотек;
- предоставляет как C++, так и C-интерфейсы.
