Cette taille mémoire correspond à un accès mémoire de 16 millions d'entrées avec 32 ou 64 bits par entrée. Chaque entrée est un pointeur ou un entier nul si une entrée est libre.
Il ne reste plus qu'à obtenir un code 24 bits correspondant au contenu d'une chaîne pour accéder, déclarer, vérifier ou supprimer la déclaration d'une chaîne.
Il existe nombre d'algos à cet effet. Nativement, il y a MD5 et Crc32 qu'il faut remanier à 24 (MD5 étant à 128bits et Crc32 à 32 bits).
Je me suis dit qu'il était bien urbain de tester un algo efficace et plus rapide que ces derniers.
Il est sur le forum anglais aussi, comme ça on fait partager tout le monde (ils sont très stoïques vu le manque de schématique et l'absence apparente de besoin! Mais il y aura bien un illuminé qui joindra les deux bouts entre la subtilité technique et l'utilitaire).
Ce n'est pas parfait.
Mais au moins, ça débroussaille le chemin vers l'utilisation des tables associatives!
Pour donner une syntaxe parlante, on pourrait dire ça:
PeekS(PeekL(CamX + MD24("Chaine d'exemple") ) ) = "Chaine d'exemple"
Code : Tout sélectionner
Procedure.L MD24(St.S)
Protected Length.I
Protected Result.L
Protected Stamp.I
Protected Dest.I
Length = Len(St)
St + " " ; Allocate 4 bytes
*Adr = @St
PokeL(*Adr + Length, 0) ; reset these 4 bytes
Dest = *Adr + Length - 1
For I = *Adr To Dest Step 4
Result ! PeekL(I)
Next I
; last operation
Stamp = Result & $FF000000
Stamp >> 8
Result ! Stamp
Stamp >> 8
Result ! Stamp
Stamp >> 8
Result ! Stamp
Result & $FFFFFF
ProcedureReturn Result
EndProcedure
Structure CamX ; Structure d'une table d'association
*Ptr[1 << 24]
EndStructure
CamX.CamX