File : charles-hash_string.adb


--source of this algorithm: GNAT.HTable.Hash (g-htable.adb)


with Ada.Unchecked_Conversion;

function Charles.Hash_String (Key : String) return Integer'Base is

   type Uns is mod 2 ** 32;

   function Rotate_Left (Value : Uns; Amount : Natural) return Uns;
   pragma Import (Intrinsic, Rotate_Left);

   Tmp : Uns := 0;

   function To_Integer is 
      new Ada.Unchecked_Conversion (Uns, Integer'Base);

begin

   for J in Key'Range loop
      Tmp := Rotate_Left (Tmp, 1) + Character'Pos (Key (J));
   end loop;

--   return Header_Num'First +

--            Header_Num'Base (Tmp mod Header_Num'Range_Length);


   return To_Integer (Tmp);

end Charles.Hash_String;