{
  $Project$
  $Workfile$
  $Revision$
  $DateUTC$
  $Id$

  This file is part of the Indy (Internet Direct) project, and is offered
  under the dual-licensing agreement described on the Indy website.
  (http://www.indyproject.org/)

  Copyright:
   (c) 1993-2005, Chad Z. Hower and the Indy Pit Crew. All rights reserved.
}
{
  $Log$
}
{
  Rev 1.1    2003-10-16 11:22:42  HHellström
  Fixed for dotNET

  Rev 1.0    11/13/2002 07:53:32 AM  JPMugaas
}

unit IdHashElf;

interface

{$i IdCompilerDefines.inc}

uses
  IdGlobal,
  IdHash;

type
  TIdHashElf = class(TIdHash32)
  public
    procedure HashStart(var VRunningHash : UInt32); override;
    procedure HashByte(var VRunningHash : UInt32; const AByte : Byte); override;
  end;

implementation

{ TIdHashElf }

procedure TIdHashElf.HashStart(var VRunningHash: UInt32);
begin
  VRunningHash := 0;
end;

procedure TIdHashElf.HashByte(var VRunningHash: UInt32; const AByte: Byte);
var
  LTemp: UInt32;
begin
  VRunningHash := (VRunningHash shl 4) + AByte;
  LTemp := VRunningHash and $F0000000;
  if LTemp <> 0 then begin
    VRunningHash := VRunningHash xor (LTemp shr 24);
  end;
  VRunningHash := VRunningHash and (not LTemp);
end;

end.

