comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Large arrays (again), problem case for GNAT
Date: Fri, 15 Apr 2005 15:21:32 +0200
Date: 2005-04-15T15:21:32+02:00	[thread overview]
Message-ID: <bixuxedquttd$.2yk2de9elwh6$.dlg@40tude.net> (raw)
In-Reply-To: pan.2005.04.15.11.48.56.281070@linuxchip.demon.co.uk.uk.uk

On Fri, 15 Apr 2005 11:49:23 GMT, Dr. Adrian Wrigley wrote:

> On Fri, 15 Apr 2005 00:21:50 -0500, Randy Brukardt wrote:
> 
>> My pool expands
>> the arrays by rewriting the dope of the arrays passed into the functions -
>> something that no one should ever do unless they're the author of the
>> compiler. And probably not even then.
> 
> I did this a lot a few years ago with GNAT.  It worked extremely well.
> (no I'm not the author of the compiler!)
> 
> I couldn't understand why there was no decent mechanism for changing
> the size of an array.  The resulting code was much cleaner, faster
> and more memory efficient than using fancy data structures/container
> libraries.
> 
> Why did the language not provide an equivalent of 'realloc' for
> arrays?

I would propose:

generic
   type Element_Type is limited private;
   type Index_Type is (<>);
   type Array_Type is array (Index_Type) of Element_Type;
   type Access_Type is access Array_Type;
procedure Ada.Array_Resize (X : in out Access_Type; Elements : Integer);

and 

generic
   type Element_Type is private;
   type Index_Type is (<>);
   type Array_Type is array (Index_Type) of Element_Type;
   type Access_Type is access Array_Type;
procedure Ada.Array_Expand
   (  X : in out Access_Type;
      Elements : Natural;
      Initial : Element_Type
   );

- Element_Type is limited in the variant with 2 arguments and for an actual
array of limited elements the implementation ensures that the result will
not be moved in the address space. Otherwise Storage_Error is propagated.

- For arrays of non-limited components the implementation is free to copy,
adjust, finalize elements.

- When Elements is negative the removed elements are properly finalized.

- Storage_Error is propagated when the array wasn't re-sized as required,
but X.all is valid.

- Program_Error is propagated when X.all becomes invalid, for example after
element's initialization/finalization exceptions.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de



  reply	other threads:[~2005-04-15 13:21 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-04-13 12:46 Large arrays (again), problem case for GNAT Dr. Adrian Wrigley
2005-04-13 13:10 ` Larry Kilgallen
2005-04-13 13:24   ` Alex R. Mosteo
2005-04-13 13:31   ` Marc A. Criley
2005-04-13 19:52 ` Jeffrey Carter
2005-04-13 19:54 ` Randy Brukardt
2005-04-13 22:01   ` (see below)
2005-04-14  0:16     ` Robert A Duff
2005-04-14  1:11       ` Alexander E. Kopilovich
2005-04-14  7:29         ` Dmitry A. Kazakov
2005-04-14  7:45           ` Duncan Sands
     [not found]           ` <1113464720.9829.20.camel@localhost.localdomain>
2005-04-14 13:59             ` Marius Amado Alves
2005-04-14 14:09               ` Dr. Adrian Wrigley
2005-04-14 14:40                 ` (see below)
     [not found]             ` <389d1596e98f95f0fdddc40afc0647b7@netcabo.pt>
2005-04-14 14:14               ` Duncan Sands
2005-04-14 15:18         ` Robert A Duff
2005-04-14 15:24           ` Robert A Duff
2005-04-15  5:21             ` Randy Brukardt
2005-04-15 11:49               ` Dr. Adrian Wrigley
2005-04-15 13:21                 ` Dmitry A. Kazakov [this message]
2005-04-15 14:31                   ` Dr. Adrian Wrigley
2005-04-15 14:57                     ` Dmitry A. Kazakov
2005-04-14 15:39           ` Dr. Adrian Wrigley
2005-04-14 15:48           ` Dmitry A. Kazakov
2005-04-14 21:19             ` Robert A Duff
2005-04-15  8:23               ` Dmitry A. Kazakov
2005-04-15  8:38                 ` Duncan Sands
2005-04-15  9:16                   ` Dmitry A. Kazakov
2005-04-15 18:30               ` Mark Lorenzen
2005-04-15 19:06                 ` Robert A Duff
     [not found]       ` <iSSDSN2L04G1@VB1162.spb.edu>
2005-04-14  7:34         ` Duncan Sands
2005-04-13 22:35 ` Robert A Duff
2005-04-14 11:40   ` Dr. Adrian Wrigley
2005-04-14 10:44 ` Dr. Adrian Wrigley
2005-04-14 15:03   ` Robert A Duff
2005-04-14 16:46     ` Dmitry A. Kazakov
2005-04-14 18:30       ` Pascal Obry
2005-04-14 19:45         ` Dmitry A. Kazakov
  -- strict thread matches above, loose matches on Subject: below --
2005-04-13 13:52 Duncan Sands
2005-04-13 14:20 ` Dr. Adrian Wrigley
replies disabled

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