From: Ludovic Brenta <ludovic@ludovic-brenta.org>
Subject: Re: OO Style with Ada Containers
Date: Thu, 15 Nov 2007 10:36:54 +0100
Date: 2007-11-15T10:36:54+01:00 [thread overview]
Message-ID: <87oddv3l55.fsf@ludovic-brenta.org> (raw)
In-Reply-To: 1195086265.070953.93180@d55g2000hsg.googlegroups.com
braver <deliverable@gmail.com> writes:
> my sample application [...] gets a Vector of tokens and inserts them
> into an Ordered_Map to count word occurrences:
I don't think you need to store all the tokens. All you need is a
Hashed_Set (which stores objects without duplication). I would do
something like
type Word_Counter is
Word : Ada.Strings.Unbounded.Unbounded_String;
Count : Natural;
end Word_Counter;
function Equivalent (L, R: Word_Counter) is
use type Ada.Strings.Unbounded.Unbounded_String;
begin
return L.Word = R.Word; -- ignore Count in the comparison
end Equivalent;
function Hash (Element : Word_Counter) is
begin
return Ada.Strings.Unbounded.Hash (Element.Word);
end Hash;
package Word_Counter_Hashed_Sets is
new Ada.Containers.Hadhed_Sets
(Element_Type => Word_Counter,
Hash => Hash,
Equivalent_Elements => Equivalent);
Counters : Word_Counter_Hashed_Sets.Set;
Current_Word : Ada.Strings.Unbounded.Unbounded_String;
Position : Word_Counter_Hashed_Sets.Cursor;
use type Word_Counter_Hashed_Sets.Cursor;
begin
...
Current_Word := Get_Next_Word;
Position := Counters.Find (Current_Word);
if Position = Word_Counter_Hashed_Sets.No_Element then
Counters.Insert (New_Item => (Word => Current_Word, Count => 1));
else
declare
E : constant Word_Counter := Counters.Element (Position);
begin
Counters.Replace_Element
(Position => Position,
New_Item => (Word => E.Word, -- [1]
Counter => E.Counter + 1));
end;
end if;
...
end;
(does [1] duplicate E.Word each time we increment the counter? If so,
consider using
Ada.Containers.Hashed_Sets.Generic_Keys.Update_Element_Preserving_Keys).
> -- would need to import "=" for private type WC.Cursor:
> -- if Ngram_Cursor = WC.No_Element
declare
use type WC.Cursor;
begin
if Ngram_Cursor = WC.No_Element then
> I'd appreciate any improvements to the above, which I deduced from ARM
HTH
--
Ludovic Brenta.
next prev parent reply other threads:[~2007-11-15 9:36 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-11-14 23:28 OO Style with Ada Containers braver
2007-11-14 23:50 ` Adam Beneschan
2007-11-14 23:59 ` braver
2007-11-15 0:24 ` braver
2007-11-15 9:36 ` Ludovic Brenta [this message]
2007-11-15 10:36 ` braver
2007-11-15 11:35 ` Ludovic Brenta
2007-11-15 13:50 ` braver
2007-11-19 2:45 ` Matthew Heaney
2007-11-15 18:22 ` braver
2007-11-15 20:18 ` Ludovic Brenta
2007-11-19 2:48 ` Matthew Heaney
2007-11-19 2:47 ` Matthew Heaney
2007-11-19 2:39 ` Matthew Heaney
2007-11-19 2:38 ` Matthew Heaney
2007-11-19 2:36 ` Matthew Heaney
2007-11-19 2:24 ` Matthew Heaney
2007-11-23 10:28 ` braver
2007-11-23 13:29 ` Martin Krischik
2007-11-23 14:19 ` Georg Bauhaus
2007-11-25 13:38 ` Ludovic Brenta
2007-11-26 3:58 ` Matthew Heaney
2007-11-26 3:55 ` Matthew Heaney
2007-11-23 22:25 ` braver
2007-11-23 22:46 ` Pascal Obry
2007-11-23 22:52 ` braver
2007-11-26 4:09 ` Matthew Heaney
2007-11-26 4:07 ` Matthew Heaney
2007-11-26 4:03 ` Matthew Heaney
2007-11-26 13:45 ` Matthew Heaney
2007-11-26 19:09 ` braver
2007-11-26 20:29 ` Matthew Heaney
2007-11-27 19:31 ` Georg Bauhaus
2007-11-27 20:12 ` Matthew Heaney
2007-11-25 14:08 ` braver
2007-11-26 4:21 ` Matthew Heaney
2007-11-19 1:04 ` Matthew Heaney
2007-11-15 8:43 ` Dmitry A. Kazakov
2007-11-15 14:04 ` Maciej Sobczak
2007-11-19 2:53 ` Matthew Heaney
2007-11-19 13:44 ` Maciej Sobczak
2007-11-19 14:44 ` Martin
2007-11-19 15:51 ` Matthew Heaney
2007-11-19 17:33 ` Markus E L
2007-11-19 21:29 ` Maciej Sobczak
2007-11-19 22:16 ` Matthew Heaney
2007-11-19 22:22 ` Matthew Heaney
2007-11-20 14:11 ` Maciej Sobczak
2007-11-20 17:00 ` Matthew Heaney
2007-11-20 17:17 ` Matthew Heaney
2007-11-20 21:13 ` Maciej Sobczak
2007-11-20 21:57 ` Matthew Heaney
2007-11-21 4:51 ` Matthew Heaney
2007-11-21 9:18 ` Georg Bauhaus
2007-11-21 15:59 ` Maciej Sobczak
2007-11-21 17:41 ` Georg Bauhaus
2007-11-21 22:25 ` Jeffrey R. Carter
2007-11-20 18:06 ` Georg Bauhaus
2007-11-19 16:19 ` Dmitry A. Kazakov
2007-11-19 20:45 ` Maciej Sobczak
2007-11-20 2:24 ` Matthew Heaney
2007-11-20 9:06 ` Dmitry A. Kazakov
2007-11-20 12:16 ` Georg Bauhaus
2007-11-21 15:17 ` Dmitry A. Kazakov
2007-11-19 2:50 ` Matthew Heaney
2007-11-19 1:03 ` Matthew Heaney
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox