std.digest.murmurhash
Вычисляет хэш-значения MurmurHash произвольных данных. MurmurHash — это некриптографическая хеш-функция, подходящая для общего поиска на основе хеширования. Она оптимизирована для x86, но может использоваться на всех архитектурах.
Текущая версия — MurmurHash3, которая генерирует 32-битное или 128-битное значение хеша. Более старые MurmurHash 1 и 2 в настоящее время не поддерживаются.
MurmurHash3 существует в трёх вариантах, упорядоченных по возрастанию производительности:
-
MurmurHash3!32генерирует 32-битное значение и оптимизирована для 32-битных архитектур -
MurmurHash3!(128, 32)генерирует 128-битное значение и оптимизирована для 32-битных архитектур -
MurmurHash3!(128, 64)генерирует 128-битное значение и оптимизирована для 64-битных архитектур
- Примечание
-
MurmurHash3!(128, 32)иMurmurHash3!(128, 64)генерируют разные значения. - Текущая реализация оптимизирована для архитектур little endian. Она будет давать разные результаты на архитектурах big endian и будет иметь несколько менее равномерное распределение.
std.digest. Этот модуль публично импортирует std.digest и может использоваться как самостоятельный модуль. - Источник
- std/digest/murmurhash.d
- Лицензия:
- Boost License 1.0.
- Авторы:
- Guillaume Chatelet
- Ссылки
- Реализация-ссылка
Википедия
- struct MurmurHash3(uint size, uint opt = size_t.sizeof == 8 ? 64 : 32);
-
Реализует функции MurmurHash3. Вы можете указать разрядность хеша в битах. Для 128-битных хешей можно указать, оптимизировать ли для 32 или 64-битных архитектур. Если вы не укажете значение разрядности, будет выбрана самая быстрая версия для платформы.
Этот хешер совместим с API
Digest:void start()void put(scope const(ubyte)[] data...)ubyte[Element.sizeof] finish()
Он также предоставляет более быстрый, низкоуровневый API, работающий с данными размеромElement.sizeof:void putElements(scope const(Element[]) elements...)void putRemainder(scope const(ubyte[]) data...)void finalize()Element get()ubyte[Element.sizeof] getBytes()
- Примеры:
- Удобный шаблон digest позволяет быстро хешировать любые данные.
ubyte[4] hashed = digest!(MurmurHash3!32)([1, 2, 3, 4]); writeln(hashed); // [0, 173, 69, 68]
- Примеры:
- Также можно хешировать данные типа ubyte по частям, создав экземпляр хешера и вызвав метод 'put'.
const(ubyte)[] data1 = [1, 2, 3]; const(ubyte)[] data2 = [4, 5, 6, 7]; // The incoming data will be buffered and hashed element by element. MurmurHash3!32 hasher; hasher.put(data1); hasher.put(data2); // The call to 'finish' ensures: // - the remaining bits are processed // - the hash gets finalized auto hashed = hasher.finish(); writeln(hashed); // [181, 151, 88, 252]
- alias Element = uint;
-
Тип элемента для 32-битной реализации.
- pure nothrow @nogc void putElement(uint block);
-
Добавляет один элемент данных без увеличения
element_count. Убедитесь, что вы увеличиваетеelement_countнаElement.sizeofдля каждого вызоваputElement. - pure nothrow @nogc void putRemainder(scope const(ubyte[]) data...);
-
Добавляет оставшиеся байты. Это необходимо вызвать только один раз после
putElementи передfinalize. - pure nothrow @nogc void finalize();
-
Включает
element_countи завершает вычисление хеша. - pure nothrow @nogc Element get();
-
Возвращает хеш в виде значения uint.
- pure nothrow @nogc ubyte[4] getBytes();
-
Возвращает текущее значение хеша в виде массива ubyte.
- pure nothrow @nogc void putElements(scope const(Element[]) elements...);
-
Добавляет массив элементов сразу. Эффективнее добавлять как можно больше данных в одном вызове. На платформах, не поддерживающих чтение без выравнивания (MIPS или старые ARM-чипы), компилятор может генерировать более медленный код для обеспечения корректности.
- pure nothrow void put(scope const(ubyte)[] data...);
-
Добавляет данные к диджесту. Этот метод можно вызывать много раз подряд после начала, но до завершения.
- pure nothrow ubyte[Element.sizeof] finish();
-
Завершает вычисление хеша и возвращает вычисленное значение. Обратите внимание, что
finishможно вызвать только один раз, и последующие вызовыputзапрещены.
© 1999–2021 The D Language Foundation
Licensed under the Boost License 1.0.
https://dlang.org/phobos/std_digest_murmurhash.html