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
next prev parent 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