4. Funkcje skrótu¶
Moduł skupiający zaimplementowane funkcje skrótu w bibliotece, podzielone na rodziny.
Funkcje z konkretnej rodziny można wyłączyć, usuwając lub komentując odpowiednie makro w pliku konfiguracyjnym.
Przynależności makra do rodziny opisana została w szczegółach dotyczących danej funkcji.
Dodatkowo można wyłączyć lub włączyć funkcje dedykowane dla ciągu znaków mbs i wcs.
Wymienione funkcje dedykowane dla mbs i wcs to funkcje, gdzie nie podaje się długości przekazywanych danych,
gdyż długość wykrywana jest automatycznie podczas obliczania skrótu. Tablica elementów o typie wchar_t
to specyficzny
ciąg znaków, którego skrót może różnić się w zależności od użytego kompilatora, systemu czy platformy.
Dla tego typu przewidziane zostały dwie wielkości w trakcie implementacji - 16 i 32 bity.
Choć obliczanie skrótu danych jest proste (wystarczy wywołać funkcję), to można natknąć się na interesujące przypadki, na które należy uważać podczas pracy z funkcjami skrótu. Poniżej wypisane zostały przypadki godne uwagi:
char data[] = "HashCalculator";
wchar_t wdat[] = L"HashCalculator";
uint32_t result1_32,
result2_32;
printf( "sizeof(char) >> %zu\n", sizeof(char) );
/* sizeof(data) jest poprawne, gdyż oblicza ilość przydzielonej pamięci na tablicę */
result1_32 = ms_hash_32_sdbm( data, sizeof(data) );
result2_32 = ms_hash_mbs_32_sdbm( data );
/* jednak po sprawdzeniu okaże się, że skrót się nie zgadza */
if( result1_32 != result2_32 )
printf( "DATA: Hashes are not equal: %08X != %08X >> sizeof(data)\n",
result1_32, result2_32 );
/* teraz będzie ok */
result1_32 = ms_hash_32_sdbm( data, sizeof(data) - 1 );
if( result1_32 == result2_32 )
printf( "DATA: Hashes are equal: %08X == %08X >> sizeof(data) - 1\n",
result1_32, result2_32 );
/* można również zrobić to samo funkcją strlen */
result1_32 = ms_hash_32_sdbm( data, strlen(data) );
if( result1_32 == result2_32 )
printf( "DATA: Hashes are equal: %08X == %08X >> strlen\n",
result1_32, result2_32 );
printf( "sizeof(wchar_t) >> %zu\n", sizeof(wchar_t) );
/* tutaj próba sizeof na tablicy wdat */
result1_32 = ms_hash_32_sdbm( wdat, sizeof(wdat) );
result2_32 = ms_hash_wcs_32_sdbm( wdat );
/* skróty nie będą takie same */
if( result1_32 != result2_32 )
printf( "WDAT: Hashes are not equal: %08X != %08X >> sizeof(wdat)\n",
result1_32, result2_32 );
/* teraz powinno być ok, jednak ich wartości mogą się różnić w zależności
od rozmiaru typu wchar_t */
result1_32 = ms_hash_32_sdbm( wdat, sizeof(wdat) - sizeof(wchar_t) );
if( result1_32 == result2_32 )
printf( "WDAT: Hashes are equal: %08X == %08X >> sizeof(wdat) - sizeof(wchar_t)\n",
result1_32, result2_32 );
/* no i klapa, długość musi być podawana w bajtach! */
result1_32 = ms_hash_32_sdbm( wdat, wcslen(wdat) );
if( result1_32 != result2_32 )
printf( "WDAT: Hashes are not equal: %08X != %08X >> wcslen\n",
result1_32, result2_32 );
/* tutaj prawidłowo, rozmiar podawany w bajtach */
result1_32 = ms_hash_32_sdbm( wdat, wcslen(wdat) * sizeof(wchar_t) );
if( result1_32 == result2_32 )
printf( "WDAT: Hashes are equal: %08X == %08X >> wcslen * sizeof(wchar_t)\n",
result1_32, result2_32 );
Przykładowe wyjście:
sizeof(char) >> 1
DATA: Hashes are not equal: BEB93E90 != EE3E1D70 >> sizeof(data)
DATA: Hashes are equal: EE3E1D70 == EE3E1D70 >> sizeof(data) - 1
DATA: Hashes are equal: EE3E1D70 == EE3E1D70 >> strlen
sizeof(wchar_t) >> 4
WDAT: Hashes are not equal: 047A83F2 != ACDDB5F2 >> sizeof(wdat)
WDAT: Hashes are equal: ACDDB5F2 == ACDDB5F2 >> sizeof(wdat) - sizeof(wchar_t)
WDAT: Hashes are not equal: 5C414C7C != ACDDB5F2 >> wcslen
WDAT: Hashes are equal: ACDDB5F2 == ACDDB5F2 >> wcslen * sizeof(wchar_t)
Aby pobrać wielkość tablicy, w przeciwieństwie do wskaźników, można na niej użyć operatora sizeof
.
Zaleta ta ma jeden haczyk, gdyż każdy ciąg znaków winien być zakończony znakiem zera, które wlicza się w długość tablicy.
Dlatego od wartości zwracanej przez operator sizeof
należy odjąć ostatnie zero, aby poprawnie obliczyć
skrót dla ciągu znaków. Jak wcześniej zostało wspomniane, nie należy przyjmować, że skrót dla ciągu z elementami
o typie wchar_t
będzie zawsze taki sam, gdyż jest on uzależniony od rozmiaru tego typu.
Również ze względu na rozmiar danych, skróty dla takich samych mbs i wcs będą różne.
4.1. Algorytmy z rodziny DJB¶
-
uint32_t
ms_hash_32_djb2
(const void* data, size_t length)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu DJB2. Funkcja jest standardową implementacją algorytmu, gdzie do wyliczenia skrótu potrzebny jest rozmiar danych. Algorytm w tej wersji używa dodawania podczas operacji na bajcie pobieranym ze źródła. Skrót danych zwracany jest w postaci 32 bitowej liczby, wyświetlanej standardowo w postaci szesnastkowej. Dostępność tej funkcji jest ściśle uzależniona od makra
MSD_HASH_DJB
, ustawianego w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
- length – Długość danych wyrażona w bajtach.
Zwraca: Obliczony przez algorytm skrót danych.
-
uint32_t
ms_hash_32_djb2a
(const void* data, size_t length)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu DJB2a. Funkcja jest standardową implementacją algorytmu, gdzie do wyliczenia skrótu potrzebny jest rozmiar danych. Algorytm w tej wersji używa alternatywy wykluczającej (XOR) podczas operacji na bajcie pobieranym ze źródła. Skrót danych zwracany jest w postaci 32 bitowej liczby, wyświetlanej w postaci szesnastkowej. Dostępność tej funkcji jest ściśle uzależniona od makra
MSD_HASH_DJB
, ustawianego w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których tworzony ma być.
- length – Długość danych wyrażona w bajtach.
Zwraca: Obliczony przez algorytm skrót danych.
-
uint32_t
ms_hash_mbs_32_djb2
(const char* data)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu DJB2. Wartość zwracanego skrótu jest taka sama jak w przypadku funkcji
ms_hash_32_djb2()
. Funkcja do obliczeń nie potrzebuje rozmiaru przekazywanych danych, gdyż zakłada, że ich koniec oznaczany jest przez wartość równą zero, zapisaną na 8 bitach. Skrót danych zwracany jest w postaci 32 bitowej liczby, wyświetlanej standardowo w postaci szesnastkowej. Dostępność tej funkcji jest uzależniona od makrMSD_HASH_DJB
orazMSD_HASH_MBS_FUNCTIONS
, ustawianych w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
Zwraca: Obliczony przez algorytm skrót danych.
-
uint32_t
ms_hash_mbs_32_djb2a
(const char* data)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu DJB2a. Wartość zwracanego skrótu jest taka sama jak w przypadku funkcji
ms_hash_32_djb2a()
. Funkcja do obliczeń nie potrzebuje rozmiaru przekazywanych danych, gdyż zakłada, że ich koniec oznaczany jest przez wartość równą zero, zapisaną na 8 bitach. Skrót danych zwracany jest w postaci 32 bitowej liczby, wyświetlanej standardowo w postaci szesnastkowej. Dostępność tej funkcji jest uzależniona od makrMSD_HASH_DJB
orazMSD_HASH_MBS_FUNCTIONS
, ustawianych w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
Zwraca: Obliczony przez algorytm skrót danych.
-
uint32_t
ms_hash_wcs_32_djb2
(const wchar_t* data)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu DJB2. Wartość zwracanego skrótu jest taka sama jak w przypadku funkcji
ms_hash_32_djb2()
. Funkcja do obliczeń nie potrzebuje rozmiaru przekazywanych danych, gdyż zakłada, że ich koniec oznaczany jest przez wartość zero, zapisywaną na 16 lub 32 bitach, w zależności od rozmiaru typuwchar_t
. Skrót danych zwracany jest w postaci 32 bitowej liczby, wyświetlanej standardowo w postaci szesnastkowej. Dostępność tej funkcji jest uzależniona od makrMSD_HASH_DJB
orazMSD_HASH_WCS_FUNCTIONS
, ustawianych w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
Zwraca: Obliczony przez algorytm skrót danych.
-
uint32_t
ms_hash_wcs_32_djb2a
(const wchar_t* data)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu DJB2a. Wartość zwracanego skrótu jest taka sama jak w przypadku funkcji
ms_hash_32_djb2a()
. Funkcja do obliczeń nie potrzebuje rozmiaru przekazywanych danych, gdyż zakłada, że ich koniec oznaczany jest przez wartość zero, zapisywaną na 16 lub 32 bitach, w zależności od rozmiaru typuwchar_t
. Skrót danych zwracany jest w postaci 32 bitowej liczby, wyświetlanej standardowo w postaci szesnastkowej. Dostępność tej funkcji jest uzależniona od makrMSD_HASH_DJB
orazMSD_HASH_WCS_FUNCTIONS
, ustawianych w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
Zwraca: Obliczony przez algorytm skrót danych.
4.2. Algorytm SDBM¶
-
uint32_t
ms_hash_32_sdbm
(const void* data, size_t length)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu wykorzystywanego w bazie danych SDBM. Funkcja jest standardową implementacją algorytmu, gdzie do wyliczenia skrótu potrzebny jest rozmiar danych. Skrót danych zwracany jest w postaci 32 bitowej liczby, wyświetlanej w postaci szesnastkowej. Dostępność tej funkcji jest ściśle uzależniona od makra
MSD_HASH_SDBM
, ustawianego w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
- length – Długość danych wyrażona w bajtach.
Zwraca: Obliczony przez algorytm skrót danych.
-
uint32_t
ms_hash_mbs_32_sdbm
(const char* data)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu wykorzystywanego w bazie danych SDBM. Wartość zwracanego skrótu jest taka sama jak w przypadku funkcji
ms_hash_32_sdbm()
. Funkcja do obliczeń nie potrzebuje rozmiaru przekazywanych danych, gdyż zakłada, że ich koniec oznaczany jest przez wartość równą zero, zapisaną na 8 bitach. Skrót danych zwracany jest w postaci 32 bitowej liczby, wyświetlanej w postaci szesnastkowej. Dostępność tej funkcji jest uzależniona od makrMSD_HASH_SDBM
orazMSD_HASH_MBS_FUNCTIONS
, ustawianych w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
Zwraca: Obliczony przez algorytm skrót danych.
-
uint32_t
ms_hash_wcs_32_sdbm
(const wchar_t* data)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu wykorzystywanego w bazie danych SDBM. Wartość zwracanego skrótu jest taka sama jak w przypadku funkcji
ms_hash_32_sdbm()
. Funkcja do obliczeń nie potrzebuje rozmiaru przekazywanych danych, gdyż zakłada, że ich koniec oznaczany jest przez wartość zero, zapisywaną na 16 lub 32 bitach, w zależności od rozmiaru typuwchar_t
. Skrót danych zwracany jest w postaci 32 bitowej liczby, wyświetlanej standardowo w postaci szesnastkowej. Dostępność tej funkcji jest uzależniona od makrMSD_HASH_SDBM
orazMSD_HASH_WCS_FUNCTIONS
, ustawianych w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
Zwraca: Obliczony przez algorytm skrót danych.
4.3. Algorytm JOAAT¶
-
uint32_t
ms_hash_32_joaat
(const void* data, size_t length)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu JOAAT. Funkcja jest standardową implementacją algorytmu, gdzie do wyliczenia skrótu potrzebny jest rozmiar danych. Skrót danych zwracany jest w postaci 32 bitowej liczby, wyświetlanej standardowo w postaci szesnastkowej. Dostępność tej funkcji jest ściśle uzależniona od makra
MSD_HASH_JOAAT
, ustawianego w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
- length – Długość danych wyrażona w bajtach.
Zwraca: Obliczony przez algorytm skrót danych.
-
uint32_t
ms_hash_mbs_32_joaat
(const char* data)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu JOAAT. Wartość zwracanego skrótu jest taka sama jak w przypadku funkcji
ms_hash_32_joaat()
. Funkcja do obliczeń nie potrzebuje rozmiaru przekazywanych danych, gdyż zakłada, że ich koniec oznaczany jest przez wartość równą zero, zapisaną na 8 bitach. Skrót danych zwracany jest w postaci 32 bitowej liczby, wyświetlanej standardowo w postaci szesnastkowej. Dostępność tej funkcji jest uzależniona od makrMSD_HASH_JOAAT
orazMSD_HASH_MBS_FUNCTIONS
, ustawianych w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
Zwraca: Obliczony przez algorytm skrót danych.
-
uint32_t
ms_hash_wcs_32_joaat
(const wchar_t* data)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu JOAAT. Wartość zwracanego skrótu jest taka sama jak w przypadku funkcji
ms_hash_32_joaat()
. Funkcja do obliczeń nie potrzebuje rozmiaru przekazywanych danych, gdyż zakłada, że ich koniec oznaczany jest przez wartość zero, zapisywaną na 16 lub 32 bitach, w zależności od rozmiaru typuwchar_t
. Skrót danych zwracany jest w postaci 32 bitowej liczby, wyświetlanej standardowo w postaci szesnastkowej. Dostępność tej funkcji jest uzależniona od makrMSD_HASH_JOAAT
orazMSD_HASH_WCS_FUNCTIONS
, ustawianych w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
Zwraca: Obliczony przez algorytm skrót danych.
4.4. Algorytmy z rodziny FNV¶
-
uint32_t
ms_hash_32_fnv1
(const void* data, size_t length)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu FNV-1. Funkcja jest standardową implementacją algorytmu, gdzie do wyliczenia skrótu potrzebny jest rozmiar danych. Skrót danych zwracany jest w postaci 32 bitowej liczby, wyświetlanej standardowo w postaci szesnastkowej. Dostępność tej funkcji jest ściśle uzależniona od makra
MSD_HASH_FNV
, ustawianego w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
- length – Długość danych wyrażona w bajtach.
Zwraca: Obliczony przez algorytm skrót danych.
-
uint32_t
ms_hash_32_fnv1a
(const void* data, size_t length)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu FNV-1a. Funkcja jest standardową implementacją algorytmu, gdzie do wyliczenia skrótu potrzebny jest rozmiar danych. Skrót danych zwracany jest w postaci 32 bitowej liczby, wyświetlanej standardowo w postaci szesnastkowej. Dostępność tej funkcji jest ściśle uzależniona od makra
MSD_HASH_FNV
, ustawianego w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
- length – Długość danych wyrażona w bajtach.
Zwraca: Obliczony przez algorytm skrót danych.
-
uint64_t
ms_hash_64_fnv1
(const void* data, size_t length)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu FNV-1. Funkcja jest standardową implementacją algorytmu, gdzie do wyliczenia skrótu potrzebny jest rozmiar danych. Skrót danych zwracany jest w postaci 64 bitowej liczby, wyświetlanej standardowo w postaci szesnastkowej. Użyty algorytm nie jest zoptymalizowany pod kątem działania na procesorach 32 bitowych. Dostępność tej funkcji jest ściśle uzależniona od makra
MSD_HASH_FNV
, ustawianego w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
- length – Długość danych wyrażona w bajtach.
Zwraca: Obliczony przez algorytm skrót danych.
-
uint64_t
ms_hash_64_fnv1a
(const void* data, size_t length)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu FNV-1a. Funkcja jest standardową implementacją algorytmu, gdzie do wyliczenia skrótu potrzebny jest rozmiar danych. Skrót danych zwracany jest w postaci 64 bitowej liczby, wyświetlanej standardowo w postaci szesnastkowej. Użyty algorytm nie jest zoptymalizowany pod kątem działania na procesorach 32 bitowych. Dostępność tej funkcji jest ściśle uzależniona od makra
MSD_HASH_FNV
, ustawianego w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
- length – Długość danych wyrażona w bajtach.
Zwraca: Obliczony przez algorytm skrót danych.
-
uint32_t
ms_hash_mbs_32_fnv1
(const char* data)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu FNV-1. Wartość zwracanego skrótu jest taka sama jak w przypadku funkcji
ms_hash_32_fnv1()
. Funkcja do obliczeń nie potrzebuje rozmiaru przekazywanych danych, gdyż zakłada, że ich koniec oznaczany jest przez wartość równą zero, zapisaną na 8 bitach. Skrót danych zwracany jest w postaci 32 bitowej liczby, wyświetlanej standardowo w postaci szesnastkowej. Dostępność tej funkcji jest uzależniona od makrMSD_HASH_FNV
orazMSD_HASH_MBS_FUNCTIONS
, ustawianych w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
Zwraca: Obliczony przez algorytm skrót danych.
-
uint32_t
ms_hash_mbs_32_fnv1a
(const char* data)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu FNV-1a. Wartość zwracanego skrótu jest taka sama jak w przypadku funkcji
ms_hash_32_fnv1a()
. Funkcja do obliczeń nie potrzebuje rozmiaru przekazywanych danych, gdyż zakłada, że ich koniec oznaczany jest przez wartość równą zero, zapisaną na 8 bitach. Skrót danych zwracany jest w postaci 32 bitowej liczby, wyświetlanej standardowo w postaci szesnastkowej. Dostępność tej funkcji jest uzależniona od makrMSD_HASH_FNV
orazMSD_HASH_MBS_FUNCTIONS
, ustawianych w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
Zwraca: Obliczony przez algorytm skrót danych.
-
uint64_t
ms_hash_mbs_64_fnv1
(const char* data)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu FNV-1. Wartość zwracanego skrótu jest taka sama jak w przypadku funkcji
ms_hash_64_fnv1()
. Funkcja do obliczeń nie potrzebuje rozmiaru przekazywanych danych, gdyż zakłada, że ich koniec oznaczany jest przez wartość równą zero, zapisaną na 8 bitach. Skrót danych zwracany jest w postaci 64 bitowej liczby, wyświetlanej standardowo w postaci szesnastkowej. Użyty algorytm nie został zoptymalizowany pod kątem procesorów 32 bitowych. Dostępność funkcji jest uzależniona od makrMSD_HASH_FNV
orazMSD_HASH_MBS_FUNCTIONS
, ustawianych w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
Zwraca: Obliczony przez algorytm skrót danych.
-
uint64_t
ms_hash_mbs_64_fnv1a
(const char* data)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu FNV-1a. Wartość zwracanego skrótu jest taka sama jak w przypadku funkcji
ms_hash_64_fnv1a()
. Funkcja do obliczeń nie potrzebuje rozmiaru przekazywanych danych, gdyż zakłada, że ich koniec oznaczany jest przez wartość równą zero, zapisaną na 8 bitach. Skrót danych zwracany jest w postaci 64 bitowej liczby, wyświetlanej standardowo w postaci szesnastkowej. Użyty algorytm nie został zoptymalizowany pod kątem procesorów 32 bitowych. Dostępność funkcji jest uzależniona od makrMSD_HASH_FNV
orazMSD_HASH_MBS_FUNCTIONS
, ustawianych w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
Zwraca: Obliczony przez algorytm skrót danych.
-
uint32_t
ms_hash_wcs_32_fnv1
(const wchar_t* data)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu FNV-1. Wartość zwracanego skrótu jest taka sama jak w przypadku funkcji
ms_hash_32_fnv1()
. Funkcja do obliczeń nie potrzebuje rozmiaru przekazywanych danych, gdyż zakłada, że ich koniec oznaczany jest przez wartość zero, zapisywaną na 16 lub 32 bitach, w zależności od rozmiaru typuwchar_t
. Skrót danych zwracany jest w postaci 32 bitowej liczby, wyświetlanej standardowo w postaci szesnastkowej. Dostępność tej funkcji jest uzależniona od makrMSD_HASH_FNV
orazMSD_HASH_WCS_FUNCTIONS
, ustawianych w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
Zwraca: Obliczony przez algorytm skrót danych.
-
uint32_t
ms_hash_wcs_32_fnv1a
(const wchar_t* data)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu FNV-1a. Wartość zwracanego skrótu jest taka sama jak w przypadku funkcji
ms_hash_32_fnv1a()
. Funkcja do obliczeń nie potrzebuje rozmiaru przekazywanych danych, gdyż zakłada, że ich koniec oznaczany jest przez wartość zero, zapisywaną na 16 lub 32 bitach, w zależności od rozmiaru typuwchar_t
. Skrót danych zwracany jest w postaci 32 bitowej liczby, wyświetlanej standardowo w postaci szesnastkowej. Dostępność tej funkcji jest uzależniona od makrMSD_HASH_FNV
orazMSD_HASH_WCS_FUNCTIONS
, ustawianych w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
Zwraca: Obliczony przez algorytm skrót danych.
-
uint64_t
ms_hash_wcs_64_fnv1
(const wchar_t* data)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu FNV-1. Wartość zwracanego skrótu jest taka sama jak w przypadku funkcji
ms_hash_64_fnv1()
. Funkcja do obliczeń nie potrzebuje rozmiaru przekazywanych danych, gdyż zakłada, że ich koniec oznaczany jest przez wartość równą zero, zapisywaną na 16 lub 32 bitach, w zależności od rozmiaru typuwchar_t
. Skrót danych zwracany jest w postaci 64 bitowej liczby, wyświetlanej standardowo w postaci szesnastkowej. Użyty algorytm nie został zoptymalizowany pod kątem procesorów 32 bitowych. Dostępność tej funkcji jest uzależniona od makrMSD_HASH_FNV
orazMSD_HASH_WCS_FUNCTIONS
, ustawianych w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
Zwraca: Obliczony przez algorytm skrót danych.
-
uint64_t
ms_hash_wcs_64_fnv1a
(const wchar_t* data)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu FNV-1a. Wartość zwracanego skrótu jest taka sama jak w przypadku funkcji
ms_hash_64_fnv1a()
. Funkcja do obliczeń nie potrzebuje rozmiaru przekazywanych danych, gdyż zakłada, że ich koniec oznaczany jest przez wartość równą zero, zapisywaną na 16 lub 32 bitach, w zależności od rozmiaru typuwchar_t
. Skrót danych zwracany jest w postaci 64 bitowej liczby, wyświetlanej standardowo w postaci szesnastkowej. Użyty algorytm nie został zoptymalizowany pod kątem procesorów 32 bitowych. Dostępność tej funkcji jest uzależniona od makrMSD_HASH_FNV
orazMSD_HASH_WCS_FUNCTIONS
, ustawianych w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
Zwraca: Obliczony przez algorytm skrót danych.
4.5. Algorytmy z rodziny Murmur¶
-
uint32_t
ms_hash_32_murmur3
(const void* data, size_t length)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu MurmurHash3. Funkcja jest standardową implementacją algorytmu, gdzie do wyliczenia skrótu potrzebny jest rozmiar danych. Skrót zwracany jest w postaci 32 bitowej liczby, wyświetlanej standardowo w postaci szesnastkowej. Dostępność tej funkcji jest ściśle uzależniona od makra
MSD_HASH_MURMUR
, ustawianego w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
- length – Długość danych wyrażona w bajtach.
Zwraca: Obliczony przez algorytm skrót danych.
-
uint32_t
ms_hash_32_murmur2
(const void* data, size_t length)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu MurmurHash2. Z powodu budowy algorytmu, nie jest możliwe utworzenie rozwiązania dedykowanego dla danych, zakończonych wartością równą zero (funkcje z dodatkiem mbs lub wcs). Skrót danych zwracany jest w postaci 32 bitowej liczby, wyświetlanej standardowo w postaci szesnastkowej. Dostępność tej funkcji jest ściśle uzależniona od makra
MSD_HASH_MURMUR
, ustawianego w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
- length – Długość danych wyrażona w bajtach.
Zwraca: Obliczony przez algorytm skrót danych.
-
uint32_t
ms_hash_32_murmur1
(const void* data, size_t length)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu MurmurHash1. Z powodu budowy algorytmu, nie jest możliwe utworzenie rozwiązania dedykowanego dla danych, zakończonych wartością równą zero (funkcje z dodatkiem mbs lub wcs). Skrót danych zwracany jest w postaci 32 bitowej liczby, wyświetlanej standardowo w postaci szesnastkowej. Dostępność tej funkcji jest ściśle uzależniona od makra
MSD_HASH_MURMUR
, ustawianego w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
- length – Długość danych wyrażona w bajtach.
Zwraca: Obliczony przez algorytm skrót danych.
-
uint64_t
ms_hash_64_murmur2
(const void* data, size_t length)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu MurmurHash2. Z powodu budowy algorytmu, nie jest możliwe utworzenie rozwiązania dedykowanego dla danych, zakończonych wartością równą zero (funkcje z dodatkiem mbs lub wcs). Skrót danych zwracany jest w postaci 64 bitowej liczby, wyświetlanej standardowo w postaci szesnastkowej. Użyty algorytm nie jest zoptymalizowany pod kątem działania na procesorach 32 bitowych. Dostępność tej funkcji jest ściśle uzależniona od makra
MSD_HASH_MURMUR
, ustawianego w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
- length – Długość danych wyrażona w bajtach.
Zwraca: Obliczony przez algorytm skrót danych.
-
uint32_t
ms_hash_mbs_32_murmur3
(const char* data)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu MurmurHash3. Wartość zwracanego skrótu jest taka sama jak w przypadku funkcji
ms_hash_32_murmur3()
. Funkcja do obliczeń nie potrzebuje rozmiaru przekazywanych danych, gdyż zakłada, że ich koniec oznaczany jest przez wartość równą zero, zapisaną na 8 bitach. Skrót danych zwracany jest w postaci 32 bitowej liczby, wyświetlanej standardowo w postaci szesnastkowej. Dostępność tej funkcji jest uzależniona od makrMSD_HASH_MURMUR
orazMSD_HASH_MBS_FUNCTIONS
, ustawianych w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
Zwraca: Obliczony przez algorytm skrót danych.
-
uint32_t
ms_hash_wcs_32_murmur3
(const wchar_t* data)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu MurmurHash3. Wartość zwracanego skrótu jest taka sama jak w przypadku funkcji
ms_hash_32_murmur3()
. Funkcja do obliczeń nie potrzebuje rozmiaru przekazywanych danych, gdyż zakłada, że ich koniec oznaczany jest przez wartość równą zero, zapisywaną na 16 lub 32 bitach, w zależności od rozmiaru typuwchar_t
. Skrót danych zwracany jest w postaci 32 bitowej liczby, wyświetlanej standardowo w postaci szesnastkowej. Dostępność tej funkcji jest uzależniona od makrMSD_HASH_MURMUR
orazMSD_HASH_WCS_FUNCTIONS
, ustawianych w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
Zwraca: Obliczony przez algorytm skrót danych.
4.6. Algorytm xxHash¶
-
uint32_t
ms_hash_32_xxhash
(const void* data, size_t length)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu xxHash. Algorytm ten udostępniony został na licencji BSD 2-Clause License. Funkcja jest standardową implementacją algorytmu, gdzie do wyliczenia skrótu potrzebny jest rozmiar danych. Skrót danych zwracany jest w postaci 32 bitowej liczby, wyświetlanej standardowo w postaci szesnastkowej. Dostępność tej funkcji jest zależna od makra
MSD_HASH_XXHASH
, ustawianego w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
- length – Długość danych wyrażona w bajtach.
Zwraca: Obliczony przez algorytm skrót danych.
-
uint64_t
ms_hash_64_xxhash
(const void* data, size_t length)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu xxHash. Algorytm ten udostępniony został na licencji BSD 2-Clause License. Funkcja jest standardową implementacją algorytmu, gdzie do wyliczenia skrótu potrzebny jest rozmiar danych. Skrót danych zwracany jest w postaci 64 bitowej liczby, wyświetlanej standardowo w postaci szesnastkowej. Użyty algorytm nie jest zoptymalizowany pod kątem procesorów 32 bitowych. Dostępność tej funkcji jest zależna od makra
MSD_HASH_XXHASH
, ustawianego w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
- length – Długość danych wyrażona w bajtach.
Zwraca: Obliczony przez algorytm skrót danych.
-
uint32_t
ms_hash_mbs_32_xxhash
(const char* data)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu xxHash. Wartość zwracanego skrótu jest taka sama jak w przypadku funkcji
ms_hash_32_xxhash()
. Funkcja do obliczeń nie potrzebuje rozmiaru przekazywanych danych, gdyż zakłada, że ich koniec oznaczany jest przez wartość równą zero, zapisaną na 8 bitach. Skrót danych zwracany jest w postaci 32 bitowej liczby, wyświetlanej standardowo w postaci szesnastkowej. Dostępność tej funkcji jest uzależniona od makrMSD_HASH_XXHASH
orazMSD_HASH_MBS_FUNCTIONS
, ustawianych w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
Zwraca: Obliczony przez algorytm skrót danych.
-
uint64_t
ms_hash_mbs_64_xxhash
(const char* data)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu xxHash. Wartość zwracanego skrótu jest taka sama jak w przypadku funkcji
ms_hash_64_xxhash()
. Funkcja do obliczeń nie potrzebuje rozmiaru przekazywanych danych, gdyż zakłada, że ich koniec oznaczany jest przez wartość równą zero, zapisaną na 8 bitach. Skrót danych zwracany jest w postaci 64 bitowej liczby, wyświetlanej standardowo w postaci szesnastkowej. Dostępność tej funkcji jest uzależniona od makrMSD_HASH_XXHASH
orazMSD_HASH_MBS_FUNCTIONS
, ustawianych w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
Zwraca: Obliczony przez algorytm skrót danych.
-
uint32_t
ms_hash_wcs_32_xxhash
(const wchar_t* data)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu xxHash. Wartość zwracanego skrótu jest taka sama jak w przypadku funkcji
ms_hash_32_xxhash()
. Funkcja do obliczeń nie potrzebuje rozmiaru przekazywanych danych, gdyż zakłada, że ich koniec oznaczany jest przez wartość równą zero, zapisywaną na 16 lub 32 bitach, w zależności od rozmiaru typuwchar_t
. Skrót danych zwracany jest w postaci 32 bitowej liczby, wyświetlanej w postaci szesnastkowej. Dostępność tej funkcji jest uzależniona od makrMSD_HASH_XXHASH
orazMSD_HASH_WCS_FUNCTIONS
, ustawianych w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
Zwraca: Obliczony przez algorytm skrót danych.
-
uint64_t
ms_hash_wcs_64_xxhash
(const wchar_t* data)¶ Oblicza skrót danych podanych w parametrze, na podstawie algorytmu xxHash. Wartość zwracanego skrótu jest taka sama jak w przypadku funkcji
ms_hash_64_xxhash()
. Funkcja do obliczeń nie potrzebuje rozmiaru przekazywanych danych, gdyż zakłada, że ich koniec oznaczany jest przez wartość równą zero, zapisywaną na 16 lub 32 bitach, w zależności od rozmiaru typuwchar_t
. Skrót danych zwracany jest w postaci 64 bitowej liczby, wyświetlanej w postaci szesnastkowej. Dostępność tej funkcji jest uzależniona od makrMSD_HASH_XXHASH
orazMSD_HASH_WCS_FUNCTIONS
, ustawianych w pliku konfiguracyjnym lub bezpośrednio w kompilatorze.Parametry: - data – Dane na podstawie których ma być tworzony skrót.
Zwraca: Obliczony przez algorytm skrót danych.