comp.lang.ada
 help / color / mirror / Atom feed
From: "Matthew Heaney" <matthew_heaney@acm.org>
Subject: Re: Generics and parameter modes
Date: 1999/08/17
Date: 1999-08-17T00:00:00+00:00	[thread overview]
Message-ID: <37b9a5e3@news1.us.ibm.net> (raw)
In-Reply-To: 37B85F88.C87638C4@dowie-cs.demon.co.uk

In article <37B85F88.C87638C4@dowie-cs.demon.co.uk> , Martin Dowie 
<martin@dowie-cs.demon.co.uk>  wrote:

> i have an instance of a package similar to the generic listed below.
> when calling the 'size' routine the actual parameter is passed by copy
> and not by reference as i had expected. this is really annoying as the
> data object is a few hundred kbytes in size! is there anything in Ada95
> that allows/requires this?
>
> generic
>     type an_item is private;
>     maximum_number_of_items : positive;
> package generic_list is
>     subtype a_number_of_items is natural range 0 ..
> maximum_number_of_items;
>     subtype an_item_index is natural range 1 .. maximum_number_of_items;
>
>     type a_list is private;
>     -- Lots of other stuff...
>     function size (list : in a_list) return a_number_of_items;
> private
>     type an_array_of_items is array (an_item_index) of an_item;
>     type a_list is record
>         current_size, current_item : a_number_of_items;
>         items : an_array_of_items;
>     end record;
> end generic_list;
>
> the type used in the declaration ...

Do you mean "in the instantiation"?

> ...is a variant record which it self
> contains variant fields within a number of the variant branches (approx.
> 300 bytes storage required).

o  You could make the list type limited, and implement the full view of the
type as limited:

  type A_List is limited private;
...
private
...
  type A_List is limited record ... end record;

You lose the assignment operator, but that's no big deal.  Just declare a
Copy operation:

  procedure Copy
    (From : in     A_List;
     To   : in out A_List);


o  You can privately implement the type as tagged.  Tagged types are always
passed by reference:

  type A_List is private;
...
private
...
  type A_List is tagged record ... end record;



--
Matt

It is impossible to feel great confidence in a negative theory which has
always rested its main support on the weak points of its opponent.

Joseph Needham, "A Mechanistic Criticism of Vitalism"




      parent reply	other threads:[~1999-08-17  0:00 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1999-08-16  0:00 Generics and parameter modes Martin Dowie
1999-08-17  0:00 ` Tucker Taft
1999-08-21  0:00   ` Martin Dowie
1999-08-21  0:00     ` Robert Dewar
1999-08-21  0:00       ` Martin Dowie
1999-08-17  0:00 ` Matthew Heaney [this message]
replies disabled

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