From: Michael R <michael@zanyblue.com>
Subject: Re: Ada.Containers Hash function for a set of small integers
Date: Fri, 23 Apr 2010 15:47:38 -0700 (PDT)
Date: 2010-04-23T15:47:38-07:00 [thread overview]
Message-ID: <0590cf17-12ea-401d-9dc3-02365139b37e@p35g2000prf.googlegroups.com> (raw)
In-Reply-To: m28w8dyhjr.fsf@pushface.org
On Apr 23, 2:39 pm, Simon Wright <si...@pushface.org> wrote:
> Michael R <mich...@zanyblue.com> writes:
> > Hi Folks,
>
> > I'd like to use the generic Hashed_Maps container to store mappings
> > from a set of small integers (three) to Wide_Strings
> > (Indefinite_Hashed_Maps):
>
> > (1, 10, 4) => "ABC",
> > (10, 3, 5) => "XYZ",
>
> > Does anyone have recommendations on how best to implement the Hash
> > function for keys like this?
>
> I don't know about 'best', but in ColdFrame
> (http://coldframe.sourceforge.net/coldframe/) I would generate this hash
> for use with Booch Maps, where the key components of Instance are
> {A:Integer, B:Integer, C:Integer}:
>
> function Instance_Hash (I : Instance) return Natural is
> type M is mod 2**31;
> Result : M := 0;
> begin
> Result := Result xor M (I.A mod 2**31);
> Result := Result * 10019;
> Result := Result xor M (I.B mod 2**31);
> Result := Result * 10019;
> Result := Result xor M (I.C mod 2**31);
> Result := Result * 10019;
> return Natural (Result);
> end Instance_Hash;
>
> I believe the 10019 came from Knuth, but can't see a reference.
Hi,
Thank you for this suggestion. Just fyi, my GNAT 4.4.3 compiler
generated
xtest.adb:20:40: value not in range of type "Standard.Integer"
xtest.adb:20:40: static expression fails Constraint_Check
for "M (I.A mod 2**31)" expressions. Rephrasing as
Result := Result xor M'Mod (I.A);
compiled OK.
Take care,
Michael.
next prev parent reply other threads:[~2010-04-23 22:47 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-04-22 23:26 Ada.Containers Hash function for a set of small integers Michael R
2010-04-23 1:39 ` John B. Matthews
2010-04-23 21:39 ` Simon Wright
2010-04-23 22:47 ` Michael R [this message]
2010-04-24 11:28 ` Simon Wright
2010-04-26 18:37 ` Robert A Duff
2010-04-26 21:05 ` Simon Wright
2010-04-26 21:50 ` Adam Beneschan
2010-04-27 4:50 ` AdaMagica
2010-04-27 19:04 ` Simon Wright
2010-04-27 19:08 ` Simon Wright
2010-04-23 23:08 ` Jeffrey R. Carter
2010-04-26 15:33 ` Warren
2010-04-26 18:14 ` Jeffrey R. Carter
2010-04-26 18:32 ` Charmed Snark
2010-05-05 4:29 ` Yannick Duchêne (Hibou57)
2010-05-06 15:46 ` Warren
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox