-
Notifications
You must be signed in to change notification settings - Fork 16
/
hash.txt
81 lines (73 loc) · 4.68 KB
/
hash.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
HASH
HEADER ==> #<boost/functional/hash.hpp>
LIBRARIES ==> #Aucune.
NAMESPACE ==> #boost::
UTILISATION ==> #Utiliser la librairie CRC pour les checksum de réseau.
#Il s'agit de l'utilisation des hashes pour les bases
#de données, non pas pour la sécurité.
hash_value(ARG) #Retourne un hash d'ARG sous forme de SIZE_T_VAL
#Préférer utiliser le functor boost::hash.
#ARG peut être :
# - n'importe lequel des types fondamentaux. S'il
# s'agit d'un TOUINT_VAL, le hash est souvent
# identique à ce TOUINT_VAL.
# Il peut donc aussi s'agir d'un pointeur (dont STR
# et WSTR).
# - d'une STRING (utilise hash_range()) (hash différent
# de sa conversion en STR)
# - d'une std::pair (utilise hash_combine())
# - d'un des containers de std:: (utilise hash_range())
# - d'un std::complex
hash_combine(SIZE_T_VAR,#Même chose, sauf qu'au lieu de renvoyer une valeur, la
ARG) #valeur est combinée avec SIZE_T_VAR. Ainsi, plusieurs
#appels de hash_combine sur des ARG différents avec une
#même SIZE_T_VAR (initialisée à 0), permet d'avoir un
#hash pour un ensemble d'ARG.
hash_range(SIZE_T_VAR, #Comme hash_combine(), mais plutôt que de faire une
INPUT_ITVR1, INPT_ITVR2)#succession d'hash_combine() sur tous les éléments du
#range, le fait en un seul appel.
hash_range(INPUT_ITVR1, #Même chose, mais plutôt que d'enregistrer dans une
INPT_ITVR2) #variable, renvoie la SIZE_T_VAL du hash. Renvoie donc
#la hash_value d'un range.
hash <WVAR> #Functor générant une hash value. WVAR est le type des
#ARG utilisés.
#Peut par ailleurs supporter les WVAR personnalisées,
#dont boost::uuids::uuid.
#Pour personnaliser les WVAR supportées par hash, il
#suffit qu'il existe une fonction, dans le même
#namespace que la déclaration de WVAR, avec le
#prototype :
# - std::size_t hash_value(WVAL)
#Renvoyant un hash de WVAL sous forme de SIZE_T_VAL
#(en utilisant par exemple boost::hash lui-même).
#Par exemple :
#namespace Library
#{
# class Livre
# {
# public:
# int id;
# };
# std::size_t hash_value(Livre livre)
# { return boost::hash<int>()(livre.id); }
#}
#Ensuite :
# - hash <Livre>
#devient possible.
#Si la WVAR à personnaliser a plusieurs CLASSDT dont il
#faut un seul hash, on peut utiliser hash_combine dans
#la définition d'hash_value().
#Si pas compilé, mettre plutôt dans namespace boost::,
#donc faire :
# #ifdef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
# namespace boost
# #else
# namespace NAMESPACE
# #endif
# { ... }
HASH(ARG) #Renvoie hash_value(ARG).
PORTABILITE ==> #Hasher des FONC_ADR ne marche pas sous MSVC++ 7.0, ni
#hash_value (mais pas hash, hash_range et hash_combine)
#avec un ADR.