From: news.univie.ac.at!chx400!sicsun!disuns2!disuns2.epfl.ch!sidou@uunet.uu.ne t (Dominique Sidou)
Subject: Re: Problem with inefficiency and records with variant parts
Date: 7 Oct 92 12:03:37 GMT [thread overview]
Message-ID: <SIDOU.92Oct7130337@litsun.epfl.ch> (raw)
First, I want to reformulate the problem, I think it
was not enough precise in my first post:
Suppose:
PACKAGE qwe IS
subtype t1 is Integer;
type t2 is array(1..1000) of Integer;
type t3 is array (1..1000) of Boolean;
subtype st is integer range 1..3;
type t (s : st := 1) is record
case s is
when 1 => c1 : t1;
when 2 => c2 : t2;
when 3 => c3 : t3;
end case;
end record;
procedure fillt1(v1 : in out t1);
procedure fillt2(v2 : in out t2);
procedure fillt3(v3 : in out t3);
procedure fillt(v : in out t; s : in st);
END qwe;
package body qwe is
procedure fillt1(v1 : in out t1) is
begin
v1 := 1;
end fiilt1;
procedure fillt2(v2 : in out t2) is
begin
for i in v2'range loop
v2(i) := 2;
end loop;
end fillt2
procedure fillt3(v3 : in out t3) is
begin
for i in v2'range loop
v3(i) := true;
end loop;
end fillt3;
procedure fillt(v : in out t; s : in st) is
begin
-- ?? How can I Do ??
-- to cast v to v(s) and then call
-- the corresponding filling procedure
-- without any copy of a structure of
-- type t2 or t3.
case s is
when 1 =>
v := (s => 1, c1 => 0);
fillt1(v.c1);
when 2 =>
v := (s => 2, c2 => (others => 0)); -- useless copy to avoid !!
fillt1(v.c2);
when 3 =>
v := (s => 3, c3 => (others => false)); -- useless copy to avoid !!
fillt1(v.c3);
end case;
end fillt;
end qwe;
I think now the problem is well formulated.
Precisions:
1: I know that if my components were
references it would be easy. But i have to deal
with static structures.
2: Working with Verdix Ada 6.0.3 on Sun4/SunOs 4.1.1
Thanks in advance for any ideas,
/DS.
Sidou Dominique, Ecole Polytechnique Federale de Lausanne,
DI-LIT-INN138, Ecublens, CH-1015 Lausanne, Suisse
tel: 693.26.48. e-mail: sidou@litsun.epfl.ch
--
Sidou Dominique, Ecole Polytechnique Federale de Lausanne,
DI-LIT-INN138, Ecublens, CH-1015 Lausanne, Suisse
tel: 693.26.48. e-mail: sidou@litsun.epfl.ch
next reply other threads:[~1992-10-07 12:03 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
1992-10-07 12:03 news.univie.ac.at!chx400!sicsun!disuns2!disuns2.epfl.ch!sidou [this message]
-- strict thread matches above, loose matches on Subject: below --
1992-10-07 16:15 Problem with inefficiency and records with variant parts Dave Collard x7468
1992-10-07 13:34 deccrl!caen!zaphod.mps.ohio-state.edu!cis.ohio-state.edu!news.sei.cmu.edu
1992-10-06 15:58 Robert I. Eachus
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox