私は私を悩ませているこの独特のコードを持っています、
// exbPtr points to 128-bit unsigned integer
// lgID is a "short" with 0xFFFF being the max value
int hash = (*exbPtr + (int)lgID * 9) & tlpLengthMask;
最初に、実際には配列であるこの「ハッシュテーブル」は256要素に初期化され、tlpLengthMaskは255に設定されます。
次に、この不思議なコードがあります。そのすぐ上に、「ここに到達した場合、衝突が発生しました」というコメントがあります。そして、再びループバックを開始するので、これはハッシュの衝突であり、再ハッシュしているように見えますか?
hash = (hash + (int)lgID * 2 + 1) & tlpLengthMask;
さらに、モジュラスとしてマスクを使用しているため、この配列の長さは2の累乗である必要があることを示す大量のデバッグコードがあります。
誰かが著者の意図が何であったかを説明できますか?この背後にある理由は何ですか?
編集-私が識別しようとしているのは、なぜ彼が9を掛けたのか、そしてなぜ2を掛けて再ハッシュするのかということです。