Qual é a maneira canônica de escrever uma função hasher para TEqualityComparer.Construct?

Considere o seguinte registro:

TMyRecord = record
  b: Boolean;
  // 3 bytes of padding in here with default record alignment settings
  i: Integer;
end;

Desejo implementarIEqualityComparer<TMyRecord>. Para fazer isso eu quero ligarTEqualityComparer<TMyRecord>.Construct. Isso precisa ser fornecido com umTEqualityComparison<TMyRecord> que não apresenta problemas para mim.

Contudo,Construct também requer umTHasher<TMyRecord> e gostaria de conhecer o método canônico para implementá-lo. A função precisa ter o seguinte formato:

function MyRecordHasher(const Value: TMyRecord): Integer;
begin
  Result := ???
end;

Eu espero que eu precise ligarBobJenkinsHash em ambos os campos do valor de registro e, em seguida, combiná-los de alguma forma. Essa é a abordagem correta e como devo combiná-las?

A razão que eu não usoTEqualityComparison<TMyRecord>.Default é que ele usaCompareMem e assim será incorreto devido ao preenchimento do registro.

questionAnswers(1)

yourAnswerToTheQuestion