comp.lang.ada
 help / color / mirror / Atom feed
From: Jerry <list_email@icloud.com>
Subject: Re: How to access an array using two different indexing schemes
Date: Tue, 28 Nov 2017 20:57:46 -0800 (PST)
Date: 2017-11-28T20:57:46-08:00	[thread overview]
Message-ID: <ac428886-d567-4692-b8b7-22fcb69a755f@googlegroups.com> (raw)
In-Reply-To: <ovidu5$eip$1@franka.jacob-sparre.dk>

On Monday, November 27, 2017 at 6:25:26 PM UTC-7, Randy Brukardt wrote:
> 
> An evil and not guaranteed to work on all implementation technique.
> 
> The OP just needs to use an appropriate type conversion to change the bounds 
> of their array (odd no one has mentioned that):
> 
> If one has:
> 
>    subtype RV1_5 is Real_Vector(1..5);
> 
> Then the type conversion:
>     RV1_5(X) has the new bounds, and (by itself) doesn't copy any memory.
> 
> Thus, using a subprogram to temporarily bind the object shouldn't result in 
> any copying of the data (no guarantees, of course, but it will always work - 
> rememberm avoid premature optimization!):
> 
>     procedure Do_Y (Y : RV1_5) is
>     begin
>          -- Operations on Y.
>     end Do_Y;
> 
>     ...
>     Do_Y (RV1_5(X));
> 
> This is the best way to change the bounds of an array (or part of an array) 
> in Ada.
> 
>                                                             Randy.

Your method shows how to pass the re-dimensioned array to a subprogram for processing with a typecast. But I also need to process the array in the same program that the subtype is declared. How would I do the typecast without allocating more memory?

Something like this:

procedure Doubly_Indexed_Array is
   declare x with dimensions (0 .. 4)
   declare y with dimensions (1 .. 5) using the same memory as x but
	                              accessed with different indices
begin
   x(0) := 10.0;
   y(3) := 20.0;
   print x(0) resulting in 10.0
   print y(1) resulting in 10.0
   print x(2) resulting in 20.0
   print y(3) resulting in 20.0
end Doubly_Indexed_Array;

Jerry

  reply	other threads:[~2017-11-29  4:57 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-24 11:42 How to access an array using two different indexing schemes Jerry
2017-11-24 12:33 ` Jeffrey R. Carter
2017-11-24 15:52   ` AdaMagica
2017-11-24 22:25     ` Jerry
2017-11-25 13:57       ` AdaMagica
2017-11-24 22:23   ` Jerry
2017-11-25 15:39   ` Robin
2017-11-25 20:58     ` Jerry
2017-11-26 10:22       ` Robin
2017-11-28 21:57       ` G. B.
2017-11-24 17:37 ` A. Cervetti
2017-11-24 21:48   ` Jerry
2017-11-24 22:15     ` Robert A Duff
2017-11-24 23:38       ` Jerry
2017-11-26  1:07         ` Jerry
2017-11-26  8:58           ` Dmitry A. Kazakov
2017-11-26 10:31             ` Jerry
2017-11-28  1:31             ` Randy Brukardt
2017-11-28  1:25   ` Randy Brukardt
2017-11-29  4:57     ` Jerry [this message]
2017-11-29 15:01       ` AdaMagica
2017-11-29 15:21         ` AdaMagica
2017-11-30  5:32           ` Jerry
2017-11-30  5:30         ` Jerry
2017-11-29 15:03       ` AdaMagica
2017-11-29 20:53         ` Randy Brukardt
2017-11-29 16:03       ` Shark8
2017-11-29 17:04         ` AdaMagica
2017-11-29 20:56           ` Randy Brukardt
2017-11-30  5:56             ` Jerry
2017-11-30 11:11               ` AdaMagica
2017-11-30 11:40                 ` AdaMagica
2017-11-30 14:47                   ` Niklas Holsti
2017-11-30 17:30                     ` AdaMagica
2017-11-30 19:31                       ` G. B.
2017-11-30 19:43                         ` Shark8
2017-11-30 22:10                           ` Randy Brukardt
2017-11-30 21:57                     ` Randy Brukardt
2017-11-30 22:49                 ` Jerry
2017-11-30 23:00                   ` Jerry
2017-11-30 21:50               ` Randy Brukardt
2017-11-30 23:13                 ` Jerry
2017-11-24 18:37 ` Per Sandberg
2017-11-24 21:28   ` Jerry
2017-11-24 21:40     ` Dmitry A. Kazakov
2017-11-28  1:33     ` Randy Brukardt
2017-11-24 22:12 ` Robert A Duff
2017-11-28  1:39   ` Randy Brukardt
replies disabled

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