Каков канонический способ написания хеш-функции для TEqualityComparer.Construct?
Рассмотрим следующую запись:
TMyRecord = record
b: Boolean;
// 3 bytes of padding in here with default record alignment settings
i: Integer;
end;
Я хочу реализоватьIEqualityComparer<TMyRecord>
, Для этого я хочу позвонитьTEqualityComparer<TMyRecord>.Construct
, Это должно быть снабженоTEqualityComparison<TMyRecord>
что не представляет для меня проблем.
Тем не мение,Construct
также требуетTHasher<TMyRecord>
и я хотел бы знать канонический метод для реализации этого. Функция должна иметь следующую форму:
function MyRecordHasher(const Value: TMyRecord): Integer;
begin
Result := ???
end;
Я ожидаю, что мне нужно позвонитьBobJenkinsHash
в обоих полях значения записи, а затем объединить их, как. Это правильный подход, и как мне их сочетать?
Причина, по которой я не пользуюсьTEqualityComparison<TMyRecord>.Default
это то, что он используетCompareMem
и поэтому будет неправильным из-за заполнения записи.