From: Brian Rogoff <bpr@bpr.best.vwh.net>
Subject: Re: List Container Strawman 1.4
Date: Thu, 03 Jan 2002 00:20:03 GMT
Date: 2002-01-03T00:20:03+00:00 [thread overview]
Message-ID: <Pine.BSF.4.40.0201030015330.39038-100000@bpr.best.vwh.net> (raw)
In-Reply-To: <u3782cper6a931@corp.supernews.com>
Very nice Matthew! I think I'll dust off my old attempt at STL in Ada and
incorporate these fragments.
FWIW, I didn't even find the first version too bad, though I guess I'm
thoroughly polluted by C, C++, and other non-Ada languages. Ummm, insert
a smiley after "polluted" if you're a hypersensitive C++ programmer...
-- Brian
On Wed, 2 Jan 2002, Matthew Heaney wrote:
>
> "Hyman Rosen" <hyrosen@mail.com> wrote in message
> news:3C2EB518.5040805@mail.com...
> > The generic copy seems good, but all of that address manipulation seems
> > very un-Adalike to me (and I'm not an Ada programmer!).
>
> Yes, that's true, although the address manipulation is confined to a single
> module.
>
> However, I thought about the problem some more and realized that you can
> generalize the copy algorithm to work for any kind of array (so that the
> elements don't have to be aliased) and to any container type.
>
> Here's the spec for Generic_Copy:
> generic
>
> type Source_Type (<>) is private;
>
>
> type Target_Type (<>) is limited private;
>
>
> with function Succ
>
> (Source : Source_Type) return Source_Type is <>;
>
> with procedure Copy
>
> (Source : in Source_Type;
>
> Target : in out Target_Type) is <>;
>
> procedure Generic_Copy
>
> (First : in Source_Type;
>
> Back : in Source_Type;
>
> Target : in out Target_Type);
>
> The idiom for copying an array to a list would look like:
>
> declare
>
> Items : constant Integer_Array := (1, 2, 3, 4, 5);
>
> List : List_Type;
>
> procedure Copy
> (Source : in Positive;
> Target : in out Iterator_Type) is
> pragma Warnings (Off, Target);
> begin
> Push_Back (List, Items (Source));
> end;
>
> procedure Copy is
> new Generic_Copy
> (Positive,
> Iterator_Type,
> Integer'Succ);
>
> Iter : Iterator_Type;
>
> begin
>
> Copy (Items'First, Items'First + Items'Length, Iter);
>
> end;
>
>
>
> The idiom for copying a list to an array is:
>
> declare
> Items : array (1 .. Length (List)) of Integer;
>
> procedure Copy
> (Source : in Iterator_Type;
> Target : in out Positive) is
> begin
> Items (Target) := Item (Source);
> Target := Target + 1;
> end;
>
> procedure Copy is
> new Generic_Copy
> (Iterator_Type,
> Positive);
>
> Index : Positive := Items'First;
> begin
> Copy (First (List), Back (List), Index);
> end;
>
>
>
> The fact that you can declare subprograms locally means you don't need
> STL-style insert iterators, because you can just refer to the container
> object directly. And using the index subtype as the array iterator means
> you can use any kind of array, irrespective of whether it is constrained, or
> its items aliased.
>
> If you're curious, the body of Generic_Copy is:
>
> procedure Generic_Copy
> (First : in Source_Type;
> Back : in Source_Type;
> Target : in out Target_Type) is
>
> Source : Source_Type := First;
>
> begin
>
> while Source /= Back loop
> Copy (Source, Target);
> Source := Succ (Source);
> end loop;
>
> end Generic_Copy;
>
>
>
>
>
>
next prev parent reply other threads:[~2002-01-03 0:20 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-12-13 3:23 List Container Strawman 1.4 Ted Dennison
2001-12-13 18:11 ` Brian Hanson
2001-12-13 23:02 ` Nick Roberts
2001-12-14 15:19 ` Ted Dennison
2001-12-14 23:54 ` Ted Dennison
2001-12-15 2:06 ` Server - tasking and long lived connections Eric Merritt
2001-12-15 3:10 ` James Rogers
2001-12-15 12:10 ` Florian Weimer
2001-12-15 14:38 ` Larry Kilgallen
2001-12-15 16:51 ` Steve Doiel
2001-12-17 9:15 ` Thierry Lelegard
2001-12-17 9:34 ` Jean-Pierre Rosen
2001-12-17 10:16 ` Thierry Lelegard
2001-12-18 9:08 ` Jean-Pierre Rosen
2001-12-17 15:08 ` Larry Kilgallen
2001-12-17 15:39 ` Pat Rogers
2001-12-19 18:20 ` Matthew Heaney
2001-12-19 18:50 ` Eric Merritt
2001-12-15 1:20 ` List Container Strawman 1.4 Nick Roberts
2001-12-15 20:29 ` Ted Dennison
2001-12-16 18:45 ` Nick Roberts
2001-12-21 15:53 ` Ted Dennison
2001-12-21 16:42 ` Marin David Condic
2001-12-21 18:28 ` Ted Dennison
2001-12-21 18:47 ` Marin David Condic
2001-12-21 19:39 ` Ted Dennison
2001-12-21 19:48 ` Marin David Condic
2001-12-22 12:29 ` Simon Wright
2001-12-21 20:03 ` Nick Roberts
2001-12-21 16:52 ` Marin David Condic
2001-12-21 18:41 ` Ted Dennison
2001-12-21 19:14 ` Marin David Condic
2001-12-21 21:13 ` Ted Dennison
2001-12-22 5:34 ` John B. Matthews
2001-12-21 20:19 ` Stephen Leake
2001-12-21 21:35 ` Ted Dennison
2001-12-24 11:58 ` Florian Weimer
2001-12-24 14:42 ` Eric Merritt
2001-12-24 22:47 ` Ted Dennison
2001-12-25 22:15 ` Florian Weimer
2001-12-28 13:58 ` Ted Dennison
2001-12-21 17:43 ` Stephen Leake
2001-12-21 18:44 ` Ted Dennison
2001-12-16 21:53 ` Larry Hazel
2001-12-15 22:27 ` Ted Dennison
2001-12-16 4:32 ` Darren New
2001-12-24 13:53 ` Florian Weimer
2001-12-15 23:19 ` Florian Weimer
2001-12-16 4:46 ` Ted Dennison
2001-12-24 13:57 ` Florian Weimer
2001-12-28 14:00 ` Ted Dennison
2001-12-28 16:43 ` Hyman Rosen
2001-12-28 19:12 ` Nick Roberts
2001-12-28 19:49 ` Matthew Heaney
2001-12-29 23:23 ` Matthew Heaney
2001-12-30 6:31 ` Hyman Rosen
2002-01-03 0:09 ` Matthew Heaney
2002-01-03 0:20 ` Brian Rogoff [this message]
2001-12-17 8:34 ` Mark Lundquist
2001-12-18 21:56 ` Florian Weimer
2001-12-18 21:54 ` Larry Kilgallen
2001-12-18 22:34 ` Mark Lundquist
2001-12-19 4:03 ` Nick Roberts
2001-12-24 13:54 ` Florian Weimer
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox