comp.lang.ada
 help / color / mirror / Atom feed
From: Brian Rogoff <bpr@bpr.best.vwh.net>
Subject: Re: Sugestion to Multiple Inheritance
Date: Mon, 21 Jan 2002 16:43:36 GMT
Date: 2002-01-21T16:43:36+00:00	[thread overview]
Message-ID: <Pine.BSF.4.40.0201211632460.1268-100000@bpr.best.vwh.net> (raw)
In-Reply-To: <slrna4nuhh.kn.lutz@taranis.iks-jena.de>

On Mon, 21 Jan 2002, Lutz Donnerhacke wrote:
> * Matthew Heaney wrote:
> Generics does not provide an abstract interface fullfilled by different
> implemenations.

Yes, generics can do exactly that. Do you understand the signature idiom
in Ada 95?

What you don't get, that tagged types give you, is the same kind of
polymorphism at run time. You pay for that run time capability with run
time dispatch and the overhead of tagging.

> An algorithm requires forward_iterators aof any kind.

So you parameterize over a forward iterator signature, which looks
something like this

generic
    type Value_Type (<>) is limited private;
    type Pointer_Type is access Value_Type;
    type Iterator_Type is private;

    with procedure Incr (Iterator : in out Iterator_Type) is <>;
    with function Succ (Iterator : in Iterator_Type)
                       return Iterator_Type is <>;
    with function Get_Value (Iterator : Iterator_Type)
                            return Value_Type is <>;
    with procedure Set_Value (Iterator : in out Iterator_Type;
                              Value : in Value_Type) is <>;
    with function Get_Pointer (Iterator : Iterator_Type)
                              return Pointer_Type is <>;
    with function "=" (X, Y : Iterator_Type)
                        return Boolean is <>;
package Forward_Iterator_Signature is
-- Look, no body! This is a signature package.
end Forward_Iterator_Signature;

and your algorithms package will look something like this

with Forward_Iterator_Signature;
generic
    with package Iterators is new Forward_Iterator_Signature(<>);
    use Iterators;
package Forward_Algorithms is
    -- Nonmutating sequence algorithms

    generic
        with function "=" ( X, Y: in Value_Type ) return Boolean;
    function Find ( Start, Finish: in Iterator_Type;
                   Value: in Value_Type ) return Iterator_Type;

    generic
        with function "=" ( X, Y: in Value_Type ) return Boolean;
    function Adjacent_Find ( Start, Finish: in Iterator_Type )
                           return Iterator_Type;

    -- ... etc., etc.
end Forward_Algorithms;

-- Brian





  reply	other threads:[~2002-01-21 16:43 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-01-11 10:20 Sugestion to Multiple Inheritance Lutz Donnerhacke
2002-01-11 17:21 ` Stephen Leake
2002-01-11 17:53   ` Lutz Donnerhacke
2002-01-11 19:57     ` Stephen Leake
2002-01-17  8:28       ` Lutz Donnerhacke
2002-01-17 14:31         ` Stephen Leake
2002-01-17 14:54           ` Lutz Donnerhacke
2002-01-17 20:52             ` Jim Rogers
2002-01-11 18:07 ` Mark Lundquist
2002-01-11 18:14 ` Richard Riehle
2002-01-11 20:56   ` Hyman Rosen
2002-01-12  7:35     ` Richard Riehle
2002-01-13  6:37       ` Hyman Rosen
2002-01-14 13:58         ` John English
2002-01-14 16:27           ` Ole-Hjalmar Kristensen
2002-01-12  2:09   ` Will
2002-01-11 22:04 ` Matthew Heaney
2002-01-15 15:32   ` Hyman Rosen
2002-01-15 16:03     ` Lutz Donnerhacke
2002-01-18 19:03       ` Matthew Heaney
2002-01-21 11:23         ` Lutz Donnerhacke
2002-01-21 16:43           ` Brian Rogoff [this message]
2002-01-21 17:00             ` Lutz Donnerhacke
2002-01-22 16:55               ` Brian Rogoff
2002-01-23  8:58                 ` Dmitry A. Kazakov
2002-01-25  0:09                   ` Brian Rogoff
2002-01-28 16:23                     ` Dmitry A. Kazakov
2002-01-12  0:28 ` Nick Roberts
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox