From: Ted Dennison <dennison@telepath.com>
Subject: Re: List container strawman
Date: Fri, 02 Nov 2001 13:14:41 GMT
Date: 2001-11-02T13:14:41+00:00 [thread overview]
Message-ID: <3BE29BD4.10401@telepath.com> (raw)
In-Reply-To: 3BE29AF4.80804@telepath.com
[-- Attachment #1: Type: text/plain, Size: 337 bytes --]
Ted Dennison wrote:
> Ted Dennison wrote:
>
>> a postitive direction. It is attached here, and available on my
>> website at
>
> Whoops. No, it wasn't. That was probably for the best, as Newsranger
> likes to hose formatting. It is attached here (posted w/ Mozilla).
(sigh)
My aplogies for posting HTML. Here's the text file.
[-- Attachment #2: containers-lists-unbounded.ads --]
[-- Type: text/plain, Size: 5343 bytes --]
-------------------------------------------------------------------------------
-- This file contains a proposal for a standard Ada list package.
--
-- version - Strawman 1.0
-------------------------------------------------------------------------------
generic
type Element is private;
package Containers.Lists.Unbounded is
-----------------------------------------------------------------------------
-- The list type. I know the name's a bit redundant, but it doesn't look too
-- bad, and any fully-named use will have to have a different name for the
-- package anyway.
-----------------------------------------------------------------------------
type List is private;
-----------------------------------------------------------------------------
-- List construction operations. The returned list will contain *copies* of
-- all the elements in the source lists, so these routines could get
-- time-consuming. However, they should be useful for Lisp-like processing.
--
-- I considered using unary minus ("-") for the "Construct" routine, but
-- that's not a common idiom right now.
-----------------------------------------------------------------------------
function "&" (Left, Right : Element) return List;
function "&" (Left : Element; Right : List) return List;
function "&" (Left : List; Right : Element) return List;
function "&" (Left, Right : List) return List;
function Construct (Initial_Element : Element) return List;
-----------------------------------------------------------------------------
-- "push" and "pop" operations.
-----------------------------------------------------------------------------
procedure Push_Front (Target : in out List; New_Element : in Element);
procedure Pop_Front (Target : in out List; Old_Element : out Element);
procedure Push_Back (Target : in out List; New_Element : in Element);
procedure Pop_Back (Target : in out List; Old_Element : out Element);
-----------------------------------------------------------------------------
-- Non-modifying query operations.
-----------------------------------------------------------------------------
function Is_Empty (Subject : List) return Boolean;
function Size (Subject : List) return Natural;
function Front (Subject : List) return Element;
function Back (Subject : List) return Element;
-----------------------------------------------------------------------------
-- I'm not too sure how useful these are, since they have to work on global
-- data.
-----------------------------------------------------------------------------
generic
with procedure Operation (Target : in out Element);
procedure Closure_Operation (Target : in out List);
-----------------------------------------------------------------------------
-- Iteration routines. Next and Previous raise No_More if there is no item in
-- the given direction. For an empty list, First = Last. As written, a
-- typical iteration idiom would look like:
--
-- i := My_Lists.First (My_List);
-- loop
-- do stuff with My_Lists.Item(i);
-- exit when i = My_Lists.Last (My_List);
-- i := My_Lists.Next (i);
-- end loop;
--
-- Another alternative using exception handling would be:
--
-- declare
-- i := My_Lists.First (My_List);
-- begin
-- loop
-- do stuff with My_Lists.Item(i);
-- i := My_Lists.Next (i);
-- end loop;
-- exception
-- when My_Lists.No_More =>
-- null;
-- end;
--
-- A third alternative using "Size" would be:
--
-- i := My_Lists.First (My_List);
-- for iteration_count in 1..My_Lists.Size (My_List) loop
-- do stuff with My_Lists.Item (i);
-- i := My_Lists.Next (i);
-- end loop;
--
-----------------------------------------------------------------------------
type Iterator is private;
No_More : exception;
function First (Subject : List) return Iterator;
function Last (Subject : List) return Iterator;
function Next (Location : Iterator) return Iterator;
function Previous (Location : Iterator) return Iterator;
function Item (Location : Iterator) return Element;
-- Ideally this routine would verify that Location was issued for the Subject
-- list and is still valid, but that would be tough to enforce. Better to call
-- such misuse a "bounded error", or somesuch.
procedure Remove (Subject : in out List; Location : Iterator);
-----------------------------------------------------------------------------
-- Sorting routine.
-- To sort in increasing order, use the ">" routine for the Reverse_Order
-- parameter. To sort in decreasing order, substitute your "<" routine for
-- the Reverse_Order parameter. :-)
-----------------------------------------------------------------------------
generic
with function Reverse_Order (Left, Right : in Element) return Boolean;
procedure Sort (Subject : in out List);
private
-- Placebo entries to make the compiler happy (so I know the syntax above is correct)
type List is new Boolean;
type Iterator is new Boolean;
end Containers.Lists.Unbounded;
next prev parent reply other threads:[~2001-11-02 13:14 UTC|newest]
Thread overview: 166+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-11-02 3:56 List container strawman Ted Dennison
2001-11-02 4:20 ` James Rogers
2001-11-02 14:23 ` Ted Dennison
2001-11-02 14:38 ` Preben Randhol
2001-11-02 15:15 ` Larry Kilgallen
2001-11-02 4:35 ` Eric Merritt
2001-11-02 15:46 ` Ted Dennison
2001-11-02 7:28 ` Ehud Lamm
2001-11-02 14:57 ` Marin David Condic
2001-11-02 15:57 ` Francisco Javier Loma Daza
2001-11-02 16:28 ` Marin David Condic
2001-11-02 17:08 ` Ted Dennison
2001-11-02 15:06 ` Ted Dennison
2001-11-02 15:32 ` Marin David Condic
2001-11-02 16:33 ` Ted Dennison
2001-11-02 16:43 ` Marin David Condic
2001-11-02 22:51 ` Jeffrey Carter
2001-11-03 0:24 ` Matthew Heaney
2001-11-03 2:21 ` Jeffrey Carter
2001-11-03 22:51 ` Rosen Trick [List container strawman] Nick Roberts
2001-11-04 13:07 ` Robert Dewar
2001-11-04 17:17 ` Side-Effects in Functions [Rosen Trick] Nick Roberts
2001-11-05 2:46 ` Robert Dewar
2001-11-05 7:26 ` pete
2001-11-05 10:29 ` Dmitry A. Kazakov
2001-11-05 11:19 ` pete
2001-11-05 14:59 ` Dmitry A. Kazakov
2001-11-05 15:21 ` Preben Randhol
2001-11-05 16:04 ` Ted Dennison
2001-11-05 16:33 ` Dmitry A. Kazakov
2001-11-05 17:42 ` Warren W. Gay VE3WWG
2001-11-05 18:11 ` Preben Randhol
2001-11-06 8:38 ` Dmitry A. Kazakov
2001-11-06 9:31 ` tgingold
2001-11-06 0:10 ` Nick Roberts
2001-11-06 9:30 ` Dmitry A. Kazakov
2001-11-06 16:18 ` Lazy Evaluation [Side-Effects in Functions] Nick Roberts
2001-11-07 3:42 ` Robert Dewar
2001-11-07 4:42 ` Darren New
2001-11-07 11:54 ` Robert Dewar
2001-11-07 13:32 ` Florian Weimer
2001-11-07 13:24 ` Jean-Marc Bourguet
2001-11-09 18:06 ` Ted Dennison
2001-11-09 18:27 ` M. A. Alves
2001-11-11 20:13 ` Georg Bauhaus
2001-12-06 17:47 ` Harri J Haataja
2001-11-07 9:28 ` Dmitry A. Kazakov
2001-11-06 20:08 ` Side-Effects in Functions [Rosen Trick] Florian Weimer
2001-11-06 22:48 ` Nick Roberts
2001-11-07 10:46 ` Florian Weimer
2001-11-05 13:56 ` Robert Dewar
2001-11-05 16:08 ` Ted Dennison
2001-11-05 17:44 ` Warren W. Gay VE3WWG
2001-11-05 15:56 ` Ted Dennison
2001-11-05 18:46 ` Nick Roberts
2001-11-08 11:51 ` Georg Bauhaus
2001-11-16 0:31 ` List container strawman Vincent Marciante
2001-11-05 15:10 ` Marin David Condic
2001-11-05 18:31 ` Ted Dennison
2001-11-05 19:09 ` Marin David Condic
2001-11-05 21:23 ` Ted Dennison
2001-11-07 19:27 ` Stephen Leake
2001-11-02 18:11 ` Mark Johnson
2001-11-02 18:46 ` Marin David Condic
2001-11-02 19:21 ` Larry Kilgallen
2001-11-03 22:30 ` Nick Roberts
2001-11-02 16:26 ` Ted Dennison
2001-11-02 16:36 ` Marin David Condic
2001-11-02 19:31 ` Ted Dennison
2001-11-02 17:49 ` Jeffrey Carter
2001-11-08 10:34 ` Ehud Lamm
2001-11-08 18:53 ` Better Finalisation [List container strawman] Nick Roberts
2001-11-09 13:36 ` Robert Dewar
2001-11-09 15:04 ` Florian Weimer
2001-11-10 0:36 ` Nick Roberts
2001-11-09 15:16 ` Ted Dennison
2001-11-09 17:30 ` Better control of assignment Jeffrey Carter
2001-11-10 0:32 ` Nick Roberts
2001-11-10 22:27 ` Jeffrey Carter
2001-11-13 6:36 ` Craig Carey
2001-11-13 6:39 ` Craig Carey
2001-11-13 8:53 ` Craig Carey
2001-11-14 9:42 ` Craig Carey
2001-11-09 14:49 ` List container strawman Ted Dennison
2001-11-09 16:12 ` Ehud Lamm
2001-11-09 17:12 ` Marin David Condic
2001-11-09 18:11 ` Ted Dennison
2001-11-09 18:42 ` Matthew Heaney
2001-11-10 17:54 ` Simon Wright
[not found] ` <3BE29AF4.80804@telepath.com>
2001-11-02 13:14 ` Ted Dennison [this message]
2001-11-02 13:31 ` Larry Kilgallen
2001-11-02 15:09 ` Ted Dennison
2001-11-02 15:13 ` Preben Randhol
2001-11-02 20:48 ` David Starner
2001-11-02 22:49 ` Larry Kilgallen
2001-11-02 17:44 ` Jeffrey Carter
2001-11-02 20:07 ` Ted Dennison
2001-11-02 23:19 ` Jeffrey Carter
2001-11-03 6:56 ` Ted Dennison
2001-11-03 19:22 ` Jeffrey Carter
2001-11-04 18:58 ` Darren New
2001-11-04 19:40 ` Larry Kilgallen
2001-11-04 20:49 ` Darren New
2001-11-07 19:07 ` ramatthews
2001-11-08 0:04 ` Darren New
2001-11-08 4:50 ` Jeffrey Carter
2001-11-08 23:26 ` ramatthews
2001-11-09 18:00 ` Ted Dennison
2001-11-09 18:13 ` Jean-Marc Bourguet
2001-11-09 18:55 ` Ted Dennison
2001-11-10 1:48 ` Nick Roberts
2001-11-10 17:04 ` Ted Dennison
2001-11-10 20:59 ` Nick Roberts
2001-11-10 23:17 ` Larry Hazel
2001-11-11 3:27 ` Nick Roberts
2001-11-12 18:39 ` Darren New
2001-11-13 0:35 ` Nick Roberts
2001-11-10 19:36 ` Ehud Lamm
2001-11-10 20:15 ` Nick Roberts
2001-11-09 19:27 ` Larry Kilgallen
2001-11-09 20:03 ` Stephen Leake
2001-11-09 21:05 ` Ted Dennison
2001-11-09 22:42 ` Larry Kilgallen
2001-11-10 4:52 ` Nick Roberts
2001-11-10 20:24 ` ramatthews
2001-11-05 19:28 ` Ted Dennison
2001-11-05 19:42 ` Jean-Marc Bourguet
2001-11-05 20:40 ` Ted Dennison
2001-11-05 20:24 ` Darren New
2001-11-05 20:45 ` Ted Dennison
2001-11-05 17:21 ` List container strawman; Construct alternatives Stephen Leake
2001-11-03 7:42 ` List container strawman Simon Wright
2001-11-05 14:00 ` Stephen Leake
2001-11-08 11:17 ` Simon Wright
2001-11-13 16:29 ` Stephen Leake
2001-11-13 22:43 ` Jeffrey Carter
2001-11-13 22:48 ` Jeffrey Carter
2001-11-14 3:46 ` Nick Roberts
2001-11-15 10:23 ` Ehud Lamm
2001-11-14 14:50 ` Marin David Condic
2001-11-14 16:53 ` Jeffrey Carter
2001-11-14 17:59 ` Marin David Condic
2001-11-15 3:33 ` Nick Roberts
2001-11-15 15:10 ` Marin David Condic
2001-11-16 1:29 ` Nick Roberts
2001-11-16 16:03 ` Marin David Condic
2001-11-16 20:19 ` Nick Roberts
2001-11-15 18:08 ` Matthew Heaney
2001-11-02 14:49 ` Marin David Condic
2001-11-02 15:15 ` Ted Dennison
2001-11-02 15:37 ` Marin David Condic
2001-11-02 16:49 ` Ted Dennison
2001-11-02 17:09 ` Marin David Condic
2001-11-04 0:10 ` Nick Roberts
2001-11-03 23:41 ` Nick Roberts
2001-11-02 17:02 ` David Botton
2001-11-02 17:55 ` David Botton
2001-11-03 19:22 ` Nick Roberts
2001-11-08 14:57 ` M. A. Alves
2001-11-09 2:00 ` Jeffrey Carter
2001-11-09 18:31 ` Ted Dennison
2001-11-10 19:56 ` Ehud Lamm
-- strict thread matches above, loose matches on Subject: below --
2001-11-02 19:54 Mike Brenner
2001-11-02 21:04 ` Ted Dennison
2001-11-03 8:09 ` Simon Wright
2001-11-03 12:46 ` Simon Wright
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox